在我们的系统中,我们同时使用Trace.Write()(旧方法)和通过log4net记录。
我想统一这些方法。我添加了名为Log4NetTraceListener的自定义侦听器,它处理来自Trace的消息并将它们放入日志文件中。简化代码:
public class Log4NetTraceListener : System.Diagnostics.TraceListener
{
public override void Write(string message)
{
_log.Debug(message);
}
它运行正常。但我想要做的还是记录到Visual Studio的输出窗口,即使是常规的log4net方法。
我的第一个想法是将TraceAppender添加到log4net配置中。它会工作正常,但与听众接触会导致无限循环。
有没有"清洁"处理这种问题的方法?也许有些过滤了听众或追加者?
答案 0 :(得分:1)
假设所有Trace.Write()
个调用都通过Log4NetTraceListener
类,而其余的log4net日志记录没有(即它只是正常.Debug()
,{{1然后,您可以配置日志记录层次结构,以便.Error()
调用不会最终调用TraceAppender。 e.g。
Trace.Write()
这假设<log4net>
<appender name="TraceAppender" type="log4net.Appender.TraceAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] - %message%newline"/>
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="TraceAppender" />
</root>
<logger name="Log4NetTraceListener">
<level value="OFF" />
</logger>
</log4net>
中_log
字段的记录名称为Log4NetTraceListener。
或者,如果您使用Log4NetTraceListener
代替DebugAppender
,则会在调试时输出到Visual Studio输出窗口。