阻止log4net中具有单独记录器的程序集的日志记录

时间:2013-03-26 14:10:05

标签: c# logging log4net log4net-configuration

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

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,我已指定了appender NewForEveryRun。除此之外,我保留了root,以便根据RollingLogFileAppender appender中指定的配置记录其余的程序集。我想,即使我为其他程序集提到了不同的记录器,root元素也会默认记录所有程序集。有没有办法阻止从根目录Assembly5Assembly6

1 个答案:

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