在log4net中对具有单独记录器的程序集进行块日志记录



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

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 appender中指定的配置记录其余的程序集。我猜,根元素在默认情况下记录所有程序集,即使我为其他程序集提到不同的记录器。是否有任何方法可以阻止Assembly5Assembly6的日志记录?

明白了!日志记录器应该是这样的:

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

最新更新