即使线程有名称,如何在log4net追加器中包含线程号?

即使线程有名称,如何在log4net追加器中包含线程号?,log4net,Log4net,在log4net配置中的ConversionPattern中,是否有方法指定线程号,即使它有名称 e、 g.类似以下内容:[7]ThreadFoo它看起来不受支持 根据列出所有输出选项的PatternLayout类文档,%thread变量似乎包装了您要更改的行为 你可以考虑使用进程ID吗?取决于你的最终目标是什么 看看这个,它看起来像: log4net.GlobalContext.Properties["pid"] = Process.GetCurrentProcess().Id; 和配置使用

在log4net配置中的ConversionPattern中,是否有方法指定线程号,即使它有名称


e、 g.类似以下内容:
[7]ThreadFoo

它看起来不受支持

根据列出所有输出选项的PatternLayout类文档,
%thread
变量似乎包装了您要更改的行为

<>你可以考虑使用进程ID吗?取决于你的最终目标是什么

看看这个,它看起来像:

log4net.GlobalContext.Properties["pid"] = Process.GetCurrentProcess().Id;
和配置使用

<layout type="log4net.Layout.PatternLayout">
     <conversionPattern value="%property{pid}" />
</layout>

您可以将线程id添加到线程名称中:

Thread myThreadObj = new Thread(...);
myThreadObj.Name = "The thread name " + myThreadObj.ManagedThreadId;

我假设您需要使用
ThreadContext
而不是
GlobalContext
,因为他需要线程级属性。实际上,我只需要始终打印线程ID,即使有问题的线程有名称。这是因为我正在处理一个类,该类创建一组线程,并给它们命名。当您拥有该类的多个实例时,您最终会在日志中拥有多个同名线程。我想我会选择自定义/扩展的PatternLayout类。谢谢