首页 > 解决方案 > NLog 可以从 C# 应用程序接收一个变量,其值在运行时发生变化吗?前任。批次 ID

问题描述

C# 应用程序可以在运行时传递 NLog 一个变量,然后将其用作插入数据库的输入吗?前任。我有一个应用程序,它在处理文件期间接收一个唯一的批处理 ID 作为命令行参数。可以同时启动该可执行文件的多个实例,并且每个实例都将收到自己的 Batch ID。为了排除故障......我真的需要让 NLog 将该批次 ID 传递给日志的插入。我看到有一个 ${var}布局渲染器,但这意味着已经在配置文件中定义了。那么所有这些可执行文件将共享相同的配置文件。所以这似乎不是一个解决方案。感谢任何帮助和代码示例(或示例链接)。感谢您的时间。

标签: c#winformsnlog

解决方案


听起来您batchId的流程是全局的,因此您可以查看Gdc layout renderer.

全局诊断上下文 - 保存每个应用程序实例值的字典结构。

支持的平台:全部(NLog 4.1 允许存储任何对象类型,而不仅仅是字符串)

当您想让当前进程中的每个记录器都可以使用某些信息时,请使用全局诊断上下文。

该文档已经解释了如何使用它,但非常简单:在您的配置文件中,您将使用${gdc:item=batchId}您想要batchId在日志中放置的位置。然后,在应用程序的某个地方(Main我敢打赌在函数中)你会这样做:GlobalDiagnosticsContext.Set("batchId", batchId);.

我不知道GlobalDiagnosticsContext居住的名称空间。

如果GlobalDiagnosticsContext太宽泛,还有Mapped Diagnostics Logical Context (MDLC)(替换旧版 MDC,因为 MDLC 还支持异步任务)


推荐阅读