コンテクスト:
log4jを使用して、監査関連のログを特定のログファイル(たとえば、audit.log)に書き込みたいと思います。データの損失に耐えたくないので、syslogappender(udpベース)を使用したくありません。さらに、ファイルが特定のサイズに達したときに、logrotateを使用してaudit.logをローテーションしています。
問題:
私が遭遇しているのは、logrotateがファイルaudit.logをaudit.log.1にローテーションすると、log4jはaudit.logへの書き込み以外にaudit.log.1への書き込みを続けるということです。
考えられるアプローチ:
logrotateを使用する以外にrollingfileappenderを使用してログローテーションを実行できることはわかっているので、rollingfileappenderがファイルをロールすると、面倒なことなく新しいファイルに切り替わります。しかし、rollingfileappenderを使用できない理由は、logrotateのポストローテーション機能を使用して、ローテーションが発生した後に、rollingfileappenderでは提供できないスクリプトをトリガーするためです。
私が考えることができるもう1つの必死の方法は、log4jのカスタマイズされたアペンダーを自分で作成して、ログファイル(audit.log.1)を閉じ、ファイルが回転したことを検出したときに新しいアペンダー(audit.log)を開くことです。
ExternallyRolledFileAppenderを使用したことはありませんが、logrotate postrotateを使用して信号をExternallyRolledFileAppenderに送信し、log4jにファイルが回転していることを認識させて、新しいファイルへの書き込みを開始できる場合はどうでしょうか。
質問:
そのようないくつかのアペンダーがすでに発明/書かれているのだろうか?または、これを解決する他のオプションがありますか?