16

最後に、WPF デスクトップ アプリケーションで log4net を試してみました。

RollingFileAppender には複数インスタンス アプリケーションのサポートが組み込まれていないという事実に苦労しています。

ロガーを満足させるためだけに、アプリケーションを単一のインスタンスに制限するという考えは好きではありません。単一インスタンスのトリックはすべて醜いハックです。

ログ ファイルのファイル名にプロセス ID を使用することも十分ではありません。この状況では RollingFileAppender は役に立たないため、これは無制限のスペースを消費する可能性があります。

1 つの解決策は、おそらくログを別のプロセスに送信することです。これにより、出力がファイルにシリアル化されます。しかし、これは新たな頭痛の種になります。

これについてどう思いますか?

4

3 に答える 3

18

RollingFileAppender はそのシナリオ用に設計されていないため、異なるプロセスから複数のRollingFileAppender インスタンスを使用して同じファイルに書き込むことはお勧めできません。

ここにはいくつかの選択肢があります。

最小限のロックで複数の FileAppender

同じファイルを指し、最小限のロックで構成された複数のFileAppenderインスタンスを使用します。これにより、複数のプロセスからの同時書き込み操作が可能になります。

<appender name="FileAppender" type="log4net.Appender.FileAppender">
    <file value="Log.txt" />
    <appendToFile value="true" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern
            value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
</appender>

複数の EventLogAppender

共有 Windows イベント ソースに書き込む複数のEventLogAppenderインスタンスを使用します。

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
    <applicationName value="MyApp" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern
            value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
</appender>

もちろん、ログをデータベース、または別のプロセスで実行されているリモート コンポーネント、さらには別のマシンに送信することもできますが、これらの選択にはより多くのインフラストラクチャをセットアップする必要があるため、シナリオではやり過ぎになる可能性があります。

関連リソース:

于 2011-04-20T09:52:27.023 に答える