log4net TraceAppender 打印“logger”部分两次。如何避免此行为:“ClassName: datetime LEVEL ClassName - message”

log4net TraceAppender prints the 'logger' part twice. How to avoid this behaviour?: "ClassName: datetime LEVEL ClassName - message"

提问人:Daan Timmer 提问时间:7/5/2023 最后编辑:Daan Timmer 更新时间:7/6/2023 访问量:46

问:

我正在对log4net使用以下配置:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <root>
    <level value="ALL" />
    <appender-ref ref="TraceAppender" />
    <appender-ref ref="file" />
  </root>
  <appender name="TraceAppender" type="log4net.Appender.TraceAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %level %logger - %message%newline" />
    </layout>
  </appender>
  <appender name="file" type="log4net.Appender.RollingFileAppender">
    <file value="loadbox.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="5" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
    </layout>
  </appender>
</log4net>

我实例化并使用我的记录器,例如:

public class MyClass
{
    private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod()?.DeclaringType);

    public MyClass()
    {
        log.Debug($"{MethodBase.GetCurrentMethod()?.Name}");
    }

}

但我的日志消息是这样写的:

13:45:37:913    MyClass: 2023-07-05 13:45:37,831 DEBUG MyClass - .ctor
                ^^^^^^^- I would like this part to be gone somehow

请参阅上面一段代码中的 Q。我怎样才能摆脱第一个印刷品?这是我在 Visual Studio 2022 的调试跟踪中看到的。 不过,写入文件中的输出是完全没问题的。MyClass

C# 日志4net

评论

0赞 urlreader 7/5/2023
您有 2 个 appender 登录到同一个文件。
0赞 Daan Timmer 7/6/2023
我没有?有两个不同的 appender 用于两个不同的输出

答:

0赞 sellotape 7/6/2023 #1

看起来至少有一些格式来自 Trace.Write() 而不是 .您要删除的位似乎是 .log4netcategory

如果查看 TraceAppender,则默认值为:

事件是使用 System.Diagnostics.Trace.Write(string,string) 方法编写的。事件的记录器名称是 Write 方法的 category 参数的默认值

Category 的配置还显示:

默认为 %logger,它将使用当前 LoggingEvent 的记录器名称作为 category 参数。

因此,您应该能够在配置文件中更改它;例如:

<category value="" />(或其他参数;我不确定这里是否空白)。


如果您不介意排序,但只是不想重复,另一种选择是不理会类别,而是从输出中删除:%logger

<conversionPattern value="%date %level - %message%newline" />