2

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

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>

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

4

1 回答 1

3

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

<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 是解决方案。不再重复记录:)

于 2013-03-26T14:34:12.877 回答