私は "myprogram"ロガーに多くのlog4net呼び出しを行うプログラムを持っています。また、他のロガーへのlog4net呼び出しを行う他のコードを呼び出します。 "myprogram"のINFOより上位のすべてのログと、それ以外のすべてのWARNよりも上位のすべてのログをキャプチャしたい。このようにして、作業中の作業に固有の作業中メッセージを取得しますが、サポートコード内で起こっている可能性のある悪いことが通知されます。これをコンソールとログファイルの両方に送信します。 >ログインすべてのためにWARNと>特定の "MYPROGRAM" ロガーのINFO:これは私には完璧な理にかなってlog4netで重複したログを削除する
<log4net>
<root>
<level value="WARN" />
<appender-ref ref="Console" />
<appender-ref ref="LogFile" />
</root>
<logger name="myprogram">
<level value="INFO" />
<appender-ref ref="Console" />
<appender-ref ref="LogFile" />
</logger>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message%newline" />
</layout>
<threshold value="INFO" />
</appender>
<appender name="LogFile" type="log4net.Appender.RollingFileAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="- %utcdate %level %logger %ndc %thread %message%newline" />
</layout>
<appendToFile value="false" />
<staticLogFileName value="true" />
<rollingStyle value="Once" />
<file value="mylogfile" />
<immediateFlush value="true" />
<threshold value="INFO" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>
</log4net>
:
は、私は次のlog4netの設定を持っています。
問題は、私がコンソールとログファイルの両方でを2回に記録しているということです。これは、<root>
と<logger>
の両方の要素が満たされている場合にのみ発生します。どちらか一方を削除すると、残っているものが期待どおりに機能します。
myprogramが "root"と "myprogram"の両方にマッチするので、WARNエントリの二重ログを取得していたかどうかはわかりましたが、ROOTがWARNに設定されていてもINFOで起きています。
ここで何か間違っているのですか、これはlog4netのバグですか?あいまいですか。
同じ問題が発生したとき、これはうまくいきました。これにより、加算性の問題も回避されます。 –
これは正解です。ロガーはルートからアペンダーを継承します。ありがとう! –
@Jeffreyあなたは相加性を使用した場合の問題点を認識していますか?私は、Googleが知っていることが書かれたものを見つけるのに成功していない。 – Tinister