如何停止显示log4net输出的记录器名称的Visual Studio Output窗口?

Jam*_*rld 28 .net log4net trace visual-studio-2010 visual-studio

我正在使用log4net DebugAppender(或TraceAppender).我已经配置了这样的appender:

<appender name="DebugAppender" type="log4net.Appender.DebugAppender">
    <immediateFlush value="true" />
        <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%level %message%newline" />
    </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

代码中的记录器以通常的每类方式声明:

private static readonly ILog Log = 
    LogManager.GetLogger(typeof(TradingApiRouteCollectionExtensions));
Run Code Online (Sandbox Code Playgroud)

"输出"窗口中的输出如下所示:

Acme.Common.Configuration.TradingApiRouteCollectionExtensions:DEBUG为服务注册路由前缀'session'Acme.Session.SessionService Acme.Common.Configuration.TradingApiRouteCollectionExtensions:为类型Acme.Session.SessionService找到的DEBUG Web方法:Acme.Common.Configuration.TradingApiRouteCollectionExtensions:调试会议/

注意每行是如何以记录器类型名称开头的.我想压制这个,因为我没有在配置中要求它,我不想要它.我看不出任何明显的方法来做到这一点.可能吗?

Ste*_*gli 15

您需要创建自己的appender.您正在使用的那个做如下:

System.Diagnostics.Debug.Write(RenderLoggingEvent(loggingEvent), loggingEvent.LoggerName);
if (!this.m_immediateFlush)
    return;
System.Diagnostics.Debug.Flush();
Run Code Online (Sandbox Code Playgroud)

因此,您总是在输出窗口中以类(记录器)名称结束.您可以从log4net Debug appender派生并覆盖该Append方法.


elm*_*tec 10

或者,您可以使用启动布局转换模式%newline.从我的配置:

    <appender name="DebuggerAppender" type="log4net.Appender.DebugAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%newline%file (%line): %level: %message%newline"/>
        </layout>
    </appender>
Run Code Online (Sandbox Code Playgroud)

优点:它比创建自己的appender更快

缺点:它显示您登录2行.

请注意%file (%line)该行的开头是Visual Studio解释的格式.它允许您单击输出窗口中的日志消息,并直接进入生成它的代码.


Mas*_*ang 5

如果您阅读TraceAppender 源代码,您会发现实际上记录器名称被写为跟踪的默认“类别”名称。因此,如果您已经设置了该值,则记录器名称将不会显示在输出中。

所以使用下面的配置:

<appender name="TraceAppender" type="log4net.Appender.TraceAppender">
  <category value="" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %level - %message%newline%exception" />
  </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

输出将是:

: 2017-02-27 22:53:26,335 [6] INFO - Task Ended
Run Code Online (Sandbox Code Playgroud)

但你可能会发现每一行都以“:”开头,这很难看。所以我的类别配置是:

...
<category value="LOG" />
...
Run Code Online (Sandbox Code Playgroud)

输出是:

LOG: 2017-02-27 22:53:26,335 [6] INFO - Task Ended
Run Code Online (Sandbox Code Playgroud)

注意:DebugAppender 不提供覆盖类别的方法。只有 TraceAppender 有效。