2011年7月22日金曜日

強制ログローテート

t-katochinさんが開発したlog4jの拡張アペンダをさらに拡張してみました。
[log4j] いいとこどりAppender

名前は「org.mericle.log4j.ForcedDailyRollingFileAppender」です。

どんな拡張かというと、
ログローテートを*必ず*実行する機能です。

例えばバッチ処理でログに加工を行う場合、
バッチが動作するまでにログローテートが行われている必要があります。

ですが今までのアペンダには、
ログローテートのタイミングは*最初の*ログ出力時という問題があります。

日次でローテートを行い、
バッチ処理が0時05分だったとしましょう。

もしも0時丁度から0時05分までにログが出力されなかったとき、
その日のバッチ処理が行えないことになってしまいます。

今まではそうした要件がある場合、
ログローテートのためにログ出力を行うことで対応していました。

ただそのためだけに、
別のバッチ処理が発生することになってしまいます。

また、ローテート用のあまり意味のないログが出力されることにもなります。
要件次第ではこれが許されないことがあります。

同じことを要求される案件が3つ目を迎えたとき、
このアペンダの作成を決意しました。

このアペンダは日次なら0時丁度にログローテートされます。
分次、週次、月次、年次にも(理論上は)対応している憎いやつです。

スレッド処理があるので不安がありますが、
JMeterでの10万回試験では問題は見つかっていません。
…きっと大丈夫!

同じ悩みを抱えたマイノリティな仲間がいましたら、
その助けになることを祈ります。

○バイナリ
log4j-extention-1.21.jar
※JDK6でコンパイルしています。

○ソース
log4j-extention-1.21-sources.jar
※Seasarファウンデーションソフトウェアライセンスに従ってください。
※2011-07-26追記:ちょっとコメントを直しました。
※2011-11-30追記:ローリング→ローテートに変更。なぜかこう言ってしまう…あ、アペンダ名か!

0 件のコメント:

コメントを投稿