javaでログを吐き出す時ってみんなどうやっているのだろう?log4jとか言うライブラリをよく目にするが、実際に使ったことはないしなぁ...。
てな感じで最近のjava界隈におけるロギングについて気になったので調べてみることにした。
そもそもjava.util.loggingなんていうソレっぽいパッケージがちゃんとあるじゃん。と思ってこいつについて調べてたらlog4jにフルボッコされていた。(例 JSR47 vs. log4j
(JSRってのはJavaの標準化機関であるJCP:Java Community Processが提案している仕様のこと。java.util.loggingはJSR47の実装。)
調べてみるとJakarta Commons Logging(ログ出力のための汎用インタフェース) + log4jという組み合わせが多い。
Jakarta Commons Loggingはインタフェースの提供が主であり、インタフェースの実装をJakarta Commons Loggingがデフォルトで持っているSimpleLogとlog4jに切り替えできる。(参考:Commons-Loggingをいじる
んじゃさわるならJakarta Commons Logging + log4jかなと思っていたら、最近ちょっと変わったようでslf4j+Logbackという組み合わせに切り替わりつつあるようだ。
先の組み合わせで言うと、slf4jはJakarta Commons Logging。Logbackはlog4jにそれぞれ対応する。
なんか名前から考えると逆じゃねと思うが、slf4jはあくまでインタフェース。
Jakarta Commons Loggingと同様に実装の切り替えができるが、設定ファイル不要でクラスパスの設定だけすればおkってのがすげぇ。よく考えたなこれ。(参考元:slf4jのロガー実装切替えメカニズム)
結論としてはslf4j+Logback、面白そう。
logbackメモとかに使い方がよくまとまってるのでちょっと触っていこうかと思う。
#この調子でフレームワークも...と思ったが、20の頃にStrutsに触れて以来、あまりJavaのフレームワークを追ってなかったので最近のフレームワークの充実っぷりに困惑気味。Javaフレームワークの比較検討資料公開 - 矢野勉のはてな日記を参考にして気が向いたら調べる。