12

複数のスレッドが同じファイルに書き込むことができるように、log4net.config に log4net の次の設定があります。

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
    <!-- Minimal locking to allow multiple threads to write to the same file -->
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <file value="log\UI.log"/>
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <maxSizeRollBackups value="30"/>
    <datePattern value="-yyyyMMdd"/>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [%thread] %-5level [%property{identity}] %logger{3} - %message%newline"/>
    </layout>
</appender>

しかし、午前 0 時を過ぎると、新しく作成されたログ ファイルが常に上書きされるため、ファイルには最後の 1 つのイベントしかありません。サーバーの再起動後、次の真夜中まですべてが正常に戻ります。
これが構成の問題なのか、log4netの問題なのか、誰にも言えますか?

4

2 に答える 2

10

同じロガーを使用するプロセス (IIS、w3wp.exe) が 1 つしかないため、ロッキング モデル キーを削除することで問題は解決しました。

<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>

ここで言われたので:

RollingFileAppender を使用すると、複数のプロセスが同時にログ ファイルのローリングを開始しようとする可能性があるため、事態はさらに悪化します。RollingFileAppender は、ファイルのローリング時にロック モデルを完全に無視します。ファイルのローリングは、このシナリオと互換性がありません。

予想外の結果が得られると思います。

于 2012-05-28T09:31:11.660 に答える
0

私の推測では、 - サインオンを使用するとdatePatternフレームワークが混乱するため、最初のロールの後、ログがロールイベントをトリガーします。

これを試すとどうなるか

<datePattern value="yyyyMMdd" />

ここの例に従って。

ローリング期間を変更するには、DatePattern 値を調整します。たとえば、「yyyyMMdd」の日付パターンは毎日ローリングします。使用可能なパターンの一覧については、System.Globalization.DateTimeFormatInfo を参照してください。

于 2012-04-19T14:03:58.697 に答える