12

logrotateと互換性のある Java でファイル ライター/ロガーを実装するためのベスト プラクティスは何ですか? 目標は、ログ API (Log4J など) の組み込みのローテーション/管理を使用する代わりに、logrotate をすべてのログ管理に使用できるようにすることです。

Java 以外の他の開発プラットフォームのコメントや回答を聞きたいです。

4

2 に答える 2

9

アプリケーション内のログ ファイルを定期的に閉じて、再度開くだけです。最終クローズ時間を保持するハンドラーが必要です。ハンドラーは、(たとえば) 最後に閉じてから 20 秒が経過し、ログ エントリが書き込まれようとしている場合に、ファイルを閉じて再度開く必要があります。ログエントリを書き込む直前にそのようなチェックを行う必要があります

そうしないと、logrotate (!) によって名前が変更されても、ログは古いファイルに書き込まれ (ファイル記述子は同じままです)、後でログが圧縮されて削除されると、ログ エントリは消えます (そのような場合、Java はそのようなログを黙って削除します)。

(ファイル名を使用して) ログを閉じて再度開くと、ファイルの名前が変更されている場合に、新しいファイルが作成されることが保証されます。ログが書き込まれるたびにファイルを閉じて再度開くのはやり過ぎです。ファイルを開くのはコストのかかる操作だからです。

于 2011-06-28T23:27:35.700 に答える