首页 > 解决方案 > 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#multithreadinglog4net

解决方案


推荐阅读