提问人:Daan Timmer 提问时间:7/5/2023 最后编辑:Daan Timmer 更新时间:7/6/2023 访问量:46
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"
问:
我正在对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
答:
0赞
sellotape
7/6/2023
#1
看起来至少有一些格式来自 Trace.Write() 而不是 .您要删除的位似乎是 .log4net
category
如果查看 TraceAppender,则默认值为:
事件是使用 System.Diagnostics.Trace.Write(string,string) 方法编写的。事件的记录器名称是 Write 方法的 category 参数的默认值
Category 的配置还显示:
默认为 %logger,它将使用当前 LoggingEvent 的记录器名称作为 category 参数。
因此,您应该能够在配置文件中更改它;例如:
<category value="" />
(或其他参数;我不确定这里是否空白)。
如果您不介意排序,但只是不想重复,另一种选择是不理会类别,而是从输出中删除:%logger
<conversionPattern value="%date %level - %message%newline" />
评论