NLog 能否从 C# 应用程序接收值在 运行 时间更改的变量?前任。批号
Can NLog receive a variable, whose value changes at run time, from a C# application? Ex. a batch Id
C# 应用程序能否在运行时向 NLog 传递一个变量,该变量随后可用作插入数据库的输入?
前任。我有一个应用程序,它在处理文件期间接收一个唯一的批次 ID 作为命令行参数。可以同时启动该可执行文件的多个实例,每个实例都将收到自己的批处理 ID。为了进行故障排除......我真的需要让 NLog 将该 Batch Id 传递给日志的插入。
我看到有一个 ${var} layout renderer 但这意味着已经在配置文件中定义了。那么所有这些可执行文件将共享相同的配置文件。所以这似乎不是一个解决方案。
感谢任何帮助和代码示例(或示例链接)。
谢谢你的时间。
听起来你的 batchId
对进程是全局的,所以你可以查看 Gdc layout renderer
。
Global Diagnostic Context - a dictionary structure to hold per-application-instance values.
Platforms Supported: All (NLog 4.1 allows storing any Object type, not just String)
Use the Global Diagnostics Context when you want to make certain information available to every logger in the current process.
文档已经解释了如何使用它,但非常简短:在您的配置文件中,您可以使用 ${gdc:item=batchId}
来将 batchId
放入日志中。然后,在应用程序的某处(我敢打赌,在 Main
函数中)你会这样做:GlobalDiagnosticsContext.Set("batchId", batchId);
.
我不知道 GlobalDiagnosticsContext
所在的名称空间。
如果 GlobalDiagnosticsContext
太宽泛,还有 Mapped Diagnostics Logical Context (MDLC)(替换旧版 MDC,因为 MDLC 也支持异步任务)
C# 应用程序能否在运行时向 NLog 传递一个变量,该变量随后可用作插入数据库的输入? 前任。我有一个应用程序,它在处理文件期间接收一个唯一的批次 ID 作为命令行参数。可以同时启动该可执行文件的多个实例,每个实例都将收到自己的批处理 ID。为了进行故障排除......我真的需要让 NLog 将该 Batch Id 传递给日志的插入。 我看到有一个 ${var} layout renderer 但这意味着已经在配置文件中定义了。那么所有这些可执行文件将共享相同的配置文件。所以这似乎不是一个解决方案。 感谢任何帮助和代码示例(或示例链接)。 谢谢你的时间。
听起来你的 batchId
对进程是全局的,所以你可以查看 Gdc layout renderer
。
Global Diagnostic Context - a dictionary structure to hold per-application-instance values.
Platforms Supported: All (NLog 4.1 allows storing any Object type, not just String)
Use the Global Diagnostics Context when you want to make certain information available to every logger in the current process.
文档已经解释了如何使用它,但非常简短:在您的配置文件中,您可以使用 ${gdc:item=batchId}
来将 batchId
放入日志中。然后,在应用程序的某处(我敢打赌,在 Main
函数中)你会这样做:GlobalDiagnosticsContext.Set("batchId", batchId);
.
我不知道 GlobalDiagnosticsContext
所在的名称空间。
如果 GlobalDiagnosticsContext
太宽泛,还有 Mapped Diagnostics Logical Context (MDLC)(替换旧版 MDC,因为 MDLC 也支持异步任务)