gpt4 book ai didi

log4net - 使用多个 log4net 文件记录器

转载 作者:行者123 更新时间:2023-12-01 07:31:06 26 4
gpt4 key购买 nike

我有文件附加程序 FileA、FileB 和 FileC。 FileA 我添加到根元素中,因为我希望它成为一个包罗万象的内容(更多内容见下文)。 FileB 和 FileC 我用于特定消息并为每个附加程序创建命名记录器。在代码中,我加载了用于大多数消息的日志,如下所示:

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

其他记录器,我是这样加载的

private static readonly log4net.ILog commandLog = log4net.LogManager.GetLogger("LoggerFileB");

发生的事情是我在 LoggerFileB 中得到了我所期望的,即,只有特殊消息。问题是这些消息也显示在 LoggerFileA 中,这是我添加到 root 的所有内容。我可以为全能创建一个特定的命名实例,而不是将它添加到根元素,但我希望调用类型作为输出中的记录器名称。创建命名记录器意味着 %logger 输出日志的名称而不是类型。有没有办法准确地获得我想要的东西(将记录器名称显示为类型,但不显示记录到其他命名记录器的消息)?希望我遗漏了一些东西,并且有一个简单的解决方案。

下面是我的 log.config 在这种情况下的样子的示例。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<appender name="FileA" type="log4net.Appender.RollingFileAppender">
<file value="FileA.txt" />
...snip...
</appender>
<appender name="FileB" type="log4net.Appender.RollingFileAppender">
<file value="FileB.txt" />
...snip...
</appender>
<appender name="FileC" type="log4net.Appender.RollingFileAppender">
<file value="FileC.txt" />
...snip...
</appender>
<root>
<level value="ALL" />
<appender-ref ref="LoggerFileA" />
</root>
<logger name="LoggerFileB">
<level value="ALL" />
<appender-ref ref="FileB" />
</logger>
<logger name="LoggerFileC">
<level value="ALL" />
<appender-ref ref="FileC" />
</logger>
</log4net>
</configuration>

最佳答案

您可以使用设置 additivity假的:

<logger name="LoggerFileB" additivity="false">

关于log4net - 使用多个 log4net 文件记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4038237/

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