私のアプリケーションには、次の 3 つのライブラリが含まれています。
Log4net
Common.Logging.log4net
Quartz (use Common.Logging.log4net to write logs)
これは私のlog4netセクションの設定です:
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="FileAppender" />
</root>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="quartz.log" />
<appendToFile value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
</appender>
</log4net>
すべて問題ありませんが、XmlConfigurator.Configure() に問題があります。このコマンドは、順番に 2 回呼び出されます。
- アプリケーションの初期化時に呼び出されます -> ログを書き込みます。
- Quartz の起動時に呼び出されます。(ソースコードCommon.Logging.log4netの読み込みタイミングは検証済み)→Quartz書き込みログ。
Quartz の起動後、XmlConfigurator.Configure() が原因でログがクリアされました。これは、このコマンドを呼び出すと、ログがクリアされることを意味します。このコマンドがプロセスで呼び出された後、ログをクリアしたくありません。
ソース dll Common.Logging.log4net を取得してコードを変更し、log4net がまだ実際に構成されているかどうかを確認し、そうでない場合は XmlConfigurator.Configure() を呼び出すことができます。しかし、私はこの解決策が好きではありません。
DLL ライブラリのコードを変更せずに別の解決策を見つけるのを手伝ってください。
詳細: http://neilkilbride.blogspot.com/2008/04/configure-log4net-only-once.html