c# - NLog 可以从 C# 应用程序接收一个变量,其值在运行时发生变化吗?前任。批次 ID
问题描述
C# 应用程序可以在运行时传递 NLog 一个变量,然后将其用作插入数据库的输入吗?前任。我有一个应用程序,它在处理文件期间接收一个唯一的批处理 ID 作为命令行参数。可以同时启动该可执行文件的多个实例,并且每个实例都将收到自己的 Batch ID。为了排除故障......我真的需要让 NLog 将该批次 ID 传递给日志的插入。我看到有一个 ${var}布局渲染器,但这意味着已经在配置文件中定义了。那么所有这些可执行文件将共享相同的配置文件。所以这似乎不是一个解决方案。感谢任何帮助和代码示例(或示例链接)。感谢您的时间。
解决方案
听起来您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 还支持异步任务)
推荐阅读
- sql - SQL 从滚动 ID 生成唯一 ID
- javascript - 如何将服务器端生成的新页面加载到 PhoneGap 或 Cordova 应用程序中?
- r - R falsely identifying abundance data as presence/absence data (fossil package)
- java - 用 replaceAll 删除部分字符串
- reactjs - 在 React 中映射组件后如何渲染组件集合
- python - altair 删除或抑制自动生成的图例
- c++ - 为什么 C++ 按位 AND 运算符对不同大小的操作数会表现得像这样?
- sql-server - SSIS - 合并xml的非链接部分
- google-analytics-filters - 在 GA 正则表达式中过滤 URL 以获取自定义 ID
- oracle - 带有跳过选项的 Oracle 加载程序