【问题标题】:Block logging for assemblies having separate loggers in log4net在 log4net 中具有单独记录器的程序集的块记录
【发布时间】:2013-03-26 14:10:05
【问题描述】:

我有两个从我的应用程序写入的日志文件,它们具有以下方式的多个程序集:

Assembly1 log -> MainLog.log
Assembly2 log -> MainLog.log
Assembly3 log -> MainLog.log
Assembly4 log -> MainLog.log
Assembly5 log -> SubLog.log
Assembly6 log -> SubLog.log

日志文件被正确写入,但这里的问题是,SubLog 条目也被写入MainLog 文件。我不希望发生这种日志记录重复。这是我的 log4net 配置。

<log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="Logs//MainLog.txt" />
        <appendToFile value="true" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="100KB" />
        <rollingStyle value="Size" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%M %date [%thread] %-5level %logger [%ndc] - %message        %C, %F, %l, %L  %M %newline" />
        </layout>
    </appender>
    <appender name="NewForEveryRun" type="log4net.Appender.FileAppender">
        <file type="log4net.Util.PatternString" value="Logs//SubLog-%processid.txt"/>
        <appendToFile value="true" />
        <maximumFileSize value="10MB" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
    </appender>
    <logger name="Assembly5">
        <level value="DEBUG"/>
        <appender-ref ref="NewForEveryRun"/>
    </logger>
    <logger name="Assembly6">
        <level value="DEBUG"/>
        <appender-ref ref="NewForEveryRun"/>
    </logger>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="RollingLogFileAppender" />
    </root>

对于Assembly5Assembly6,我指定了附加程序NewForEveryRun。除此之外,我保留了root,以便根据RollingLogFileAppender 附加程序中指定的配置记录其余程序集。我想,默认情况下,根元素会记录所有程序集,即使我提到其他程序集的不同记录器也是如此。有什么办法可以阻止从root登录Assembly5Assembly6

【问题讨论】:

    标签: c# logging log4net log4net-configuration


    【解决方案1】:

    知道了!记录器应如下所示:

    <logger name="Assembly5" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="NewForEveryRun"/>
    </logger>
    <logger name="Assembly6" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="NewForEveryRun"/>
    </logger>
    

    additivity 设置为 false 是解决方案。不再有重复的日志记录:)

    【讨论】:

    • 发生这种情况的原因是因为默认情况下Additivity 设置为 true。这意味着记录器从其父级继承附加器。在这种情况下,Assembly5Assembly6 从根记录器继承 RollingLogFileAppender
    猜你喜欢
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多