Java

Javaのロギングライブラリの歴史と現状をふんわり把握する(初学者向け)

More than 3 years have passed since last update.

かつて、Log4jというロギングライブラリがありました。

最強でした。1999年のお話です。

jvm-logging_01.png

ロギングの大切さとLog4jの素晴らしさが見直され、Java標準にjava.util.loggingというAPIが追加されました。2002年のお話です。

java.util.loggingLog4jを参考に作られましたが、ところどころ使いづらかったため、「標準」という武器をもってしても、Log4jに置き換わることはできませんでした。そのため、Javaの世界には2つのロギングライブラリが残ってしまいました。

jvm-logging_02.png

Maven1.0が2004年にリリースされ、人々はOSSライブラリを組み合わせてアプリケーションを作るようになりました。

jvm-logging_03.png

ところが、ロギングライブラリが2つあったため、Log4jを使っているライブラリと、java.util.loggingを使っているライブラリが混在してしまい、アプリケーションの運用に困ってしまいました。

jvm-logging_04.png

そこで、ログファサードライブラリとしてCommons Loggingが登場しました。

ログファサードライブラリは、ログ出力APIだけを提供し、API経由で出力要請されたログを、適切にロギングライブラリを選んで委譲してくれるライブラリです。

jvm-logging_05.png

ところが、Commons Loggingはいろいろと技術的に小難しい事情により、上手く使えませんでした。

そこで代わりに現れたログファサードライブラリがSlf4jです。

Slf4jは、Log4jjava.util.loggingCommons Loggingを利用しているライブラリを組み込んでアプリケーションを構築する際にも、これらのライブラリに送られるログを乗っ取る「アダプタ」という仕組みを提供していました。

jvm-logging_07.png

人々はSlf4jとアダプタを上手に使うことで、どんなライブラリを組み合わせても、ログ出力を自由に制御することができるようになりました。

めでたしめでたし。

jvm-logging_08.png


簡単に、気軽に読めるように、Javaのロギングの歴史をまとめてみました。

Java(JVM系)のロギング系ライブラリは、初学者には少々複雑です。

これは歴史的経緯によるところが大きいので、大雑把に歴史を知るのが、理解のための一番の近道だと思い書いてみました。

わかりやすさを重視するため、一部誇張や省略などもありますので、ご注意ください。

参考: http://www.slideshare.net/miyakawataku/concepts-and-tools-of-logging-in-java