log4jの作者が後継としてlogbackを作っていることを知った。
個人的にlog4jはよくできてるなーと勉強させていただいたので、logbackもさっそく実用できるか検証してみる。
以下の記事には作者の言葉もあって面白い。
発展しつつあるJavaのロギング by InfoQ
LOGBackに切り替える10の理由 by パワポ
動かしてみる
logback manualのChapter 1: Introduction to logbackを参考に動かしてみる。
logbackはJDK1.5でビルドされていて、動作には以下のライブラリが必要。
- slf4j-api.jar
- logback-core.jar
- logback-classic.jar
slf4jはcommons-loggingの後継として同じ作者が活動しているもの。個人的にはloggerを挿げ替えることってほとんどないので、いらない気がするんだけど必須みたいだ。
サンプルコードは以下になる。
public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(LogBackSamlpe.class.getName()); logger.debug("Hello world."); }
サンプルではgetLoggerの引数に「”chapter1.HelloWorld1″」とあったので、パッケージ名を含む完全修飾名?がセオリーっぽいのでclass.getNameとしている。他のサンプルでは「TestClass.class」と書いてたりするので、後者のほうが楽。
ログは以下のように出力された。
22:58:10.740 [main] DEBUG c.daipresents.logging.LogBackSamlpe - Hello world.
とっても簡単。
loggerのステータス表示
loggerの状態を出力できるらしい。
public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(LogBackSamlpe.class.getName()); logger.debug("Hello world."); // print internal state LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); StatusPrinter.print(lc); }
23:07:30.496 [main] DEBUG c.d.logging.logback.LogBackSamlpe - Hello world. 23:07:30,325 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml] 23:07:30,325 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml] 23:07:30,331 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Setting up default configuration.
アプリ起動時に出すのもアリかなと思う。それよりっも、ログの設定ファイルをテスト時、本番時と自動できりかえることができそうな感じが気になる。これはまた今度調べる。
今回のソースコードはGoogle Code参照のこと。