2

アプリケーションから書き込まれた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>

Assembly5とについてAssembly6は、アペンダーを指定しましたNewForEveryRun。これに加えてroot、残りのアセンブリがアペンダーで指定された構成に従ってログに記録されるように、を保持しましたRollingLogFileAppender。他のアセンブリに別のロガーについて言及している場合でも、ルート要素はデフォルトですべてのアセンブリをログに記録していると思います。Assembly5ルートのログとルートからのログをブロックする方法はあります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>

additivityfalseとして設定することが解決策です。重複するロギングはもうありません:)

于 2013-03-26T14:34:12.877 に答える