技術開発日記

技術やら日々思ったことを綴ってます。

Log4jとLogBack

文字列の生成に処理コストが掛かってしまうため、Log4jを使ってデバッグログを出力する場合は以下のように書くことが多い。

if(log.isDebugEnabled()){
     log.debug("User Name:" + user.getName());
}

しかし、正直僕はこの書き方にはとても賛成できない。
実装でデバッグ処理を書く度にこのif文も一緒に書かないといけない上に、ソースの可読性もすごく落ちる。

そこでなんとかこのif文を書かなくてもいい方法を探していたら、
どうやらCommons Loggingに相当するSLF4Jというのがあって、これがどうやら解決してくれるみたいだ。

以下は上記のLog4jで書いた内容をSLF4JのSLF4Jで書いたもの。

log.debug("User Name: {}", user.getName());

すごくシンプルだし、文字列の指定の仕方も良い。
LogBackに関しては他にもいろんな機能や設定があるみたいなので、そこらへんも後々調べていきたい。


※Spring2.0とか使っている場合は、Commons-Loggingに依存しているので、SLF4Jに変えたい場合はうまいこと設定してあげないとWebアプリケーション内で複数のロガーを持つ羽目になってよくないとのこと。