かつて、Log4jというロギングライブラリがありました。
最強でした。1999年のお話です。
ロギングの大切さとLog4jの素晴らしさが見直され、Java標準にjava.util.loggingというAPIが追加されました。2002年のお話です。
java.util.loggingはLog4jを参考に作られましたが、ところどころ使いづらかったため、「標準」という武器をもってしても、Log4jに置き換わることはできませんでした。そのため、Javaの世界には2つのロギングライブラリが残ってしまいました。
Maven1.0が2004年にリリースされ、人々はOSSライブラリを組み合わせてアプリケーションを作るようになりました。
ところが、ロギングライブラリが2つあったため、Log4jを使っているライブラリと、java.util.loggingを使っているライブラリが混在してしまい、アプリケーションの運用に困ってしまいました。
そこで、ログファサードライブラリとしてCommons Loggingが登場しました。
ログファサードライブラリは、ログ出力APIだけを提供し、API経由で出力要請されたログを、適切にロギングライブラリを選んで委譲してくれるライブラリです。
ところが、Commons Loggingはいろいろと技術的に小難しい事情により、上手く使えませんでした。
そこで代わりに現れたログファサードライブラリがSlf4jです。
Slf4jは、Log4j、java.util.logging、Commons Loggingを利用しているライブラリを組み込んでアプリケーションを構築する際にも、これらのライブラリに送られるログを乗っ取る「アダプタ」という仕組みを提供していました。
人々はSlf4jとアダプタを上手に使うことで、どんなライブラリを組み合わせても、ログ出力を自由に制御することができるようになりました。
めでたしめでたし。
簡単に、気軽に読めるように、Javaのロギングの歴史をまとめてみました。
Java(JVM系)のロギング系ライブラリは、初学者には少々複雑です。
これは歴史的経緯によるところが大きいので、大雑把に歴史を知るのが、理解のための一番の近道だと思い書いてみました。
わかりやすさを重視するため、一部誇張や省略などもありますので、ご注意ください。
参考: http://www.slideshare.net/miyakawataku/concepts-and-tools-of-logging-in-java