Log4Net 在日志中打印 "ThreadID" 和 "Thread Name"
Log4Net printing "ThreadID" and "Thread Name" in the log
在我们的应用程序中,我们通常会命名我们创建的线程。例如,我们将创建一个线程并为其命名,如 "WorkerThread".
假设这是我的 log4net 配置文件的一部分:
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="C:\Logs\MyApp\myapp.log" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="1000MB" />
<staticLogFileName value="true" />
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="FATAL" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c :: %m%n" />
</layout>
</appender>
此配置将在我的日志中打印以下内容:
2017-03-07 17:00:00,003 [MessagePump Worker] DEBUG MyApp.App :: Blah Blah Blah
我想打印:
2017-03-07 17:00:00,003 [MessagePump Worker: 2380] DEBUG MyApp.App :: Blah Blah Blah
我只是想弄清楚我需要在我的转换模式中放入什么,以便还包括上面示例中的 ThreadID (2380)。我进行了一些 google 搜索,但我似乎找不到同时打印 "Thread Name" 和 "Thread ID" 的方法。有人有什么想法吗?
在您的应用程序线程中使用:
ThreadContext.Properties["threadid"] = Thread.CurrentThread.ManagedThreadId;
在转换模式中:
%property{threadid}
除了手动添加 ThreadContext.Property 之外可能是不可能的,就像@Wouter 的回答一样。
在此处查看文档:
thread | Used to output the name of the thread that generated the logging event. Uses the thread number if no name is available.
因此,如果线程名称不存在,您只会获得一个线程 ID。我自己对此感到沮丧,因为我只想要线程 ID,即使在命名线程时也是如此。
在我们的应用程序中,我们通常会命名我们创建的线程。例如,我们将创建一个线程并为其命名,如 "WorkerThread".
假设这是我的 log4net 配置文件的一部分:
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="C:\Logs\MyApp\myapp.log" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="1000MB" />
<staticLogFileName value="true" />
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="FATAL" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c :: %m%n" />
</layout>
</appender>
此配置将在我的日志中打印以下内容:
2017-03-07 17:00:00,003 [MessagePump Worker] DEBUG MyApp.App :: Blah Blah Blah
我想打印:
2017-03-07 17:00:00,003 [MessagePump Worker: 2380] DEBUG MyApp.App :: Blah Blah Blah
我只是想弄清楚我需要在我的转换模式中放入什么,以便还包括上面示例中的 ThreadID (2380)。我进行了一些 google 搜索,但我似乎找不到同时打印 "Thread Name" 和 "Thread ID" 的方法。有人有什么想法吗?
在您的应用程序线程中使用:
ThreadContext.Properties["threadid"] = Thread.CurrentThread.ManagedThreadId;
在转换模式中:
%property{threadid}
除了手动添加 ThreadContext.Property 之外可能是不可能的,就像@Wouter 的回答一样。
在此处查看文档:
thread | Used to output the name of the thread that generated the logging event. Uses the thread number if no name is available.
因此,如果线程名称不存在,您只会获得一个线程 ID。我自己对此感到沮丧,因为我只想要线程 ID,即使在命名线程时也是如此。