Log4Net RollingFileAppenderを強制的にロールする
-
03-07-2019 - |
質問
Log4Netドキュメントによると、 RollingFileAppenderは、メッセージが記録されたときにのみログファイルをロールします。このファイルにログインする必要がありますが、毎日別のデータベースにインポートします。ファイルが必要であり、ログファイルからデータベースにデータを変換する必要があるため、データベースアペンダーを使用できません(直接コピーではありません)。問題は、午前0時以降にログアクティビティがない場合、ログがロールバックされないことです。インポーターは前日のファイルを探します(このコードは変更できません)。したがって、アクティビティがなく、ログがロールされていない場合、インポーターはファイルを見つけません。とにかく真夜中にログを強制的にロールして、ウェイクアップして強制的にロールする別のスレッドがありませんか?カスタムアペンダーでこれを実行できますか?できればこれを避けたい。
解決
同じ構成を使用してダミーのログエントリを書き込む深夜の直後にイベントを発生させるWindowsサービスを作成します。
他のヒント
「どのコードパスがロールオーバールーチンにつながるか」という質問の点から、これについて考える必要があります。そのルーチンに到達する方法がわかったら、それをトリガーする方法を決定できます。
カスタムアペンダーでできますか?もちろん、アペンダー内のコードは、それを介してログインするまで実行されないため、元のコードに戻ります。
「ウェイクアップして強制的にロールする別のスレッドを使用せずに、真夜中にログを強制的にロールする方法はありますか?」コードを実行せずに真夜中にログを強制的にローリングするには?」私はそれについておかしくなったり、あなたをin辱したりしようとはしていません。 :-)
これを解決する最も簡単な方法は、何かを起こしてログを記録し、ファイルを強制的に回転させることです。
RollingFileAppenderのドキュメントに従って設定できます毎日ロールするには、次の構成を参照してください。
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logfile" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>