log5j
googleからlog5jなるものがリリースされていた。単にGoogle Codeで公開しているだけっぽい。log5jという名前からGoogle発だと勘違いしていまいました。spinn3rという会社の作みたいです(2010.2.24)。
http://code.google.com/p/log5j/
オレオレ翻訳で概要を。勝手に追記したりしてますので、その辺の差異は原文を見て確認してください。
■特徴1.
いちいちカテゴリ指定しなくても使える。以下のコードって必要なクラスで使いまわすからコピペすることが多いため、引数のところをついつい変更忘れがちになるよね。
private static final Logger log = Logger.getLogger( MyClass.class );
log5jならこんな感じ。
private static final Logger log = new Logger();
これで自動的にそのクラスがカテゴリとして追加される。ミスが減りそうでしょ。
■特徴2.
sprintf形式をサポートした。
以前はこんなコードを書いてたでしょ。
log.error( "This thing broke: " + foo + " due to bar: " + bar + " on this thing: " + car );
log5jならこんな感じで書ける。
log.error( "This thing broke: %s due to bar: %s on this thing: %s", foo, bar, car );
見やすくなったでしょ。
それにパフォーマンスの観点でも利点がある。
例えば以下のようなログ出力があった場合、
log.debug( "This thing broke: " + foo + " due to bar: " + bar + " on this thing: " + car );
debugレベルって運用時は通常offにしているけど、上記コードは出力されないくせに文字列連結が行われてしまう。CPU使用率やヒープ使用率が上がって、GCを増発させてしまう。かといって、
if(log.isDebugEnabled()) { log.debug( "This thing broke: " + foo + " due to bar: " + bar + " on this thing: " + car ); }
こんな風にするとコードが汚くなってしょうがないので、ここぞ!という時以外は使いたくないよね。
ってことで、sprintf形式のログ出力っていいでしょ。