私はLog4Net 2.0を使用していますが、必要に応じて機能していますが、特定のログステートメント用に別のロガーを追加します。すべてのロギングは単一のファイルアペンダーに対して行われます。私がしたい変更は、サードパーティのアプリケーションがデバッグ/エラー情報を含むイベントを発生させることです。この情報をキャッチでき、便利なのは通常のアプリケーションログファイルを汚染し、代わりに独自のログに保存することを好みます。ファイル。
私が望む最終結果は、サードパーティのロギングを除くアプリケーションからのすべてのロギングを含む_log-file.txt
_というファイルです。また、サードパーティアプリケーションからのログのみを記録する_log-file-3rdparty.txt
_という2番目のファイル。私が抱えている問題は、Log4Netを2つの別々のロガーを持つように設定することです。私はすでに2番目のLogFileAppenderを作成してルートに追加しようとしましたが、これにより両方のロガーに同じロギングステートメントが挿入されます。
アプリケーション全体で、現在、次のようなGetLoggerステートメントがあります。これは理想的には同じままにする必要があるため、既存のロギングは変更されません。このステートメントの影響を受けないが、代わりに純粋にサードパーティのロギング用にインスタンス化される新しいロガーが必要です。
private readonly ILog _log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
そして、App.Configは次のようになります。
_< log4net>
<logger name="MyApp.Logging">
<level value="DEBUG"/>
</logger>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
<param name="File" value="log-file.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value=" [Application started] " />
<param name="Footer" value="[Application Finished] "/>
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
</ log4net>
_
手伝ってくれますか?
[〜#〜] edit [〜#〜]
それが何か違いを生む場合。サードパーティのログイベントは、一部のアプリケーションログイベントも発生するクラスと同じクラスにキャプチャされます。これは、クラスがサードパーティのソフトウェアを制御するためです。これは問題ですか? log4netがクラス名に基づいてどのロガーを作成するかを区別できるということはありますか?その場合、サードパーティのロギングを独自のクラスにリファクタリングする必要がありますか?
次のような特別なロガーを簡単に作成できます。
ILog specialLogger = LogManager.GetLogger("SpecialLogger");
次に、このロガー専用のアペンダーを使用するようにシステムを構成できます。
<logger name="SpecialLogger" additivity="false">
<level value="ALL" />
<appender-ref ref="SpecialLogFileAppender" />
</logger>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>