Jen*_*ann 6 logging log4net multithreading
我的应用程序使用几个具有明确定义名称的线程(即不是具有'匿名'线程的线程池).现在,所有这些线程都将其日志消息发送到一个文件 - 尽管线程ID是日志行的一部分,但这使得分析应用程序行为变得非常困难.因此,我希望每个线程都登录到自己的日志文件中.
似乎Log4Net没有内置选项来根据线程选择一个appender.有谁知道这个解决方案?请注意,我显然不希望切换到另一个日志库.
log4net“选择”appender 的方式是通过过滤。在您的场景中,您需要一种设置多个附加程序的方法,每个附加程序代表一个明确定义的线程,并且每个附加程序中都有过滤器,仅传递来自各自线程的消息。
由于线程 ID 不确定,您将需要其他东西来进行过滤。我假设您自己控制这些线程的创建,并建议每个线程在ThreadContext 的属性中注册一个标识符。接下来,您可以使用PropertyFilter根据标识符过滤消息。
下面是一个示例配置设置,它有两个附加程序,每个附加程序都附加消息,其中属性threadId的当前值与给定标识符匹配。
<appender name="x">
<filter type="log4net.Filter.Property">
<key value="threadId" />
<stringToMatch value="threadX" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
...
</appender>
<appender name="y">
<filter type="log4net.Filter.Property">
<key value="threadId" />
<stringToMatch value="threadY" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
...
</appender>
<root>
<appender-ref name="x" />
<appender-ref name="y" />
</root>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4296 次 |
| 最近记录: |