log4net - TraceListener& TraceAppender - 混合两种记录方法

时间:2016-12-12 13:43:16

标签: logging log4net trace

在我们的系统中,我们同时使用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配置中。它会工作正常,但与听众接触会导致无限循环。

有没有"清洁"处理这种问题的方法?也许有些过滤了听众或追加者?

1 个答案:

答案 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输出窗口。