4

私のアプリケーションには、次の 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

4

1 に答える 1

2

log4net が再構成されたときに、ファイル アペンダーが新しいログ ファイルを作成するように構成しました。

 <appendToFile value="false" />

これを次のように変更します。

 <appendToFile value="true" />

XmlConfigurator.Configure()複数回呼び出しても、ログ メッセージはファイルの最後に追加されます。

于 2013-06-21T09:22:55.043 に答える