代码之家  ›  专栏  ›  技术社区  ›  Tim Coker

使用多个log4net文件记录器

  •  3
  • Tim Coker  · 技术社区  · 14 年前

    我有文件附录文件A、文件B和文件C。我将filea添加到根元素中,因为我希望它是一个catch all(更多内容见下文)。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中,我的catch all添加到了根目录中。我可以为catch all创建一个特定的命名实例,而不是将其添加到根元素中,但我希望调用类型作为输出中的记录器名称。创建命名记录器意味着%logger输出日志的名称而不是类型。有没有一种方法可以精确地得到我想要的(catchall将记录器名称显示为类型,但不显示记录到其他已命名记录器的消息)?希望我遗漏了一些东西,并且有一个简单的解决方案。

    下面是我的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>
    
    1 回复  |  直到 14 年前
        1
  •  13
  •   Stefan Egli    14 年前

    您可以使用设置 additivity 错误:

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