c# - log4net 和 C# 中的多线程日志记录
问题描述
我们有一个多线程任务执行服务,它经常并行执行任务。作为我们日志消息的一部分,我们希望拥有任务名称以及执行 ID (ContextKey)。当前尝试在任务构造函数中设置上下文键:
public AsyncTaskBase(ILogger logger, IContextKeyLocator locator)
{
_Logger = logger;
_ContextKeyLocator = locator;
contextKey = _ContextKeyLocator.GenerateAndSetContextKey();
log4net.ThreadContext.Properties["ContextKey"] = contextKey;
}
从那里我们把它留给 log4net appender 模式来记录上下文键
<conversionPattern value="%date [%thread] %-5level [%property{ContextKey}] - %message" />
我们在日志中看到的是一系列具有相同线程/上下文键值的日志消息,这些消息绝对不是来自同一个任务。
所以我的问题是我该如何处理这种情况?我们希望在日志消息中具有仅与当前执行相关的属性,但它也需要是线程安全的。任何帮助,指导,方向,都会很棒。先感谢您!
解决方案
推荐阅读
- c++ - C++ - Eclipse 消息 ld:无法与架构 x86_64 的主可执行文件“./src/Chapter01.o”链接
- android-studio - 错误:清单合并失败:属性 application@appComponentFactory
- java - 为什么 Eclipse 忽略了 .project 文件?
- java - 在我的测试中重复相同的测试用例
- ios - 将应用程序移至后台,调用 viewDidLayoutSubView 并使用 UICollectionView 创建大量警告
- cron - 每小时的第一分钟运行 cron 作业
- android - 相对布局中图像按钮的奇怪行为
- bash - 如何存档旧的 git 标签并将我的更改推送到原点?
- javascript - 我可以在反应中获取元素内特定 CSS 属性的值吗?
- r - 在列表矩阵上应用索引命令