4

Log4Net のドキュメントによると、 RollingFileAppenderは、メッセージがログに記録されたときにのみログ ファイルをロールします。このファイルにログを記録する必要がありますが、毎日別のデータベースにインポートします。ファイルが必要であり、データをログ ファイルからデータベースに変換する必要があるため、データベース アペンダーを使用できません (直接のコピーではありません)。問題は、午前 0 時以降にログ アクティビティがない場合、ログがロールバックされないことです。インポーターは前日のファイルを探します (このコードを変更することはできません)。そのため、アクティビティがなく、ログがロールされていない場合、インポーターはファイルを見つけられません。ウェイクアップして強制的にロールする別のスレッドを持たずに、ログを真夜中に強制的にロールする方法はありますか? カスタムアペンダーはこれを行うことができますか? できればこれは避けたいです。

4

3 に答える 3

5

同じ構成を使用して、真夜中の直後にダミーのログ エントリを書き込むイベントを発生させる Windows サービスを作成します。

于 2009-01-06T22:28:59.000 に答える
3

これについては、「ロールオーバー ルーチンにつながるコード パスは何か」という点から考える必要があります。そのルーチンに到達する方法がわかったら、それをトリガーする方法を決定できます。

カスタムアペンダーはそれを行うことができますか? 確かに、しかしアペンダーのコードは、それを介してログインするまで実行されないため、振り出しに戻ります。

「ウェイクアップして強制的にロールする別のスレッドを持たずに、ログを真夜中に強制的にロールする方法はありますか?」という質問については、「ログを強制的にロールすることは可能ですか?」コードを実行せずに真夜中に?". 私はそれについて冗談を言ったり、あなたを侮辱したりするつもりはありません。うまくいけばあなたのために答えられるような方法で質問を言い換えようとしているだけです. :-)

これを解決する最も簡単な方法は、何かを起動してログに記録し、ファイルを強制的に回転させることです。

于 2009-01-06T22:51:09.503 に答える
0

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>
于 2009-01-06T22:34:00.707 に答える