gpt4 book ai didi

c# - 如何消除 log4net 中的重复日志记录?

转载 作者:行者123 更新时间:2023-12-03 05:38:31 29 4
gpt4 key购买 nike

我有一个程序,可以对“myprogram”记录器进行多次 log4net 调用。它还调用其他代码,对其他记录器进行 log4net 调用。我想捕获“myprogram”的所有高于 INFO 的日志,以及其他所有高于 WARN 的所有日志。通过这种方式,我可以获得特定于我正在处理的任务的正在进行的消息,但仍然会收到支持代码中发生的潜在不良情况的通知。我希望将其发送到控制台和日志文件。

我有以下 log4net 配置:

<log4net>
<root>
<level value="WARN" />
<appender-ref ref="Console" />
<appender-ref ref="LogFile" />
</root>
<logger name="myprogram">
<level value="INFO" />
<appender-ref ref="Console" />
<appender-ref ref="LogFile" />
</logger>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message%newline" />
</layout>
<threshold value="INFO" />
</appender>
<appender name="LogFile" type="log4net.Appender.RollingFileAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="- %utcdate %level %logger %ndc %thread %message%newline" />
</layout>
<appendToFile value="false" />
<staticLogFileName value="true" />
<rollingStyle value="Once" />
<file value="mylogfile" />
<immediateFlush value="true" />
<threshold value="INFO" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>
</log4net>

这对我来说非常有意义:记录>所有内容的警告和>特定“myprogram”记录器的信息。

问题是我在控制台和日志文件上都记录了两次 INFO 消息。仅当我同时拥有 <root> 时才会发生这种情况和<logger>元素已填充;如果我删除其中任何一个,那么剩下的一个就会按我的预期工作。

我可以理解我是否得到了 WARN 条目的双重记录(因为 myprogram 与“root”和“myprogram”都匹配),但即使 ROOT (大概)设置为 WARN,它也会发生在 INFO 处。

我在这里做错了什么,还是这是一个 log4net 错误/歧义?

最佳答案

您正在重复,因为您告诉它记录消息两次。我不建议在这里使用可加性,因为您可能会遇到一些副作用,只需删除不必要的配置即可:

<root>
<level value="WARN" />
<appender-ref ref="Console" />
<appender-ref ref="LogFile" />
</root>
<logger name="myprogram">
<level value="INFO" />
</logger>

您不需要在记录器myprogram中指示appender-ref,因为它将从根记录器继承它们;如果您再次指定它们,它将记录两次。

关于c# - 如何消除 log4net 中的重复日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/651277/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com