トップ «前の日記(2007-03-06) 最新 次の日記(2007-03-10)» 編集

Ussy Diary


2007-03-08

[Java]Logback を少し触る

  • Commons Logging の後継である SLF4J
  • Log4j の後継である Logback

雰囲気だけ感じてみようということで、それぞれのプロジェクトから slf4j-1.3.0.zip と logback-0.9.2.zip をダウンロード。

以下のライブラリをクラスパスに設定します。

  • slf4j-api-1.3.0.jar
  • logback-classic-0.9.2.jar
  • logback-core-0.9.2.jar

次に設定ファイルを作成します。ソースフォルダ直下 (src 以下または src/main/resources といった場所)に logback.xml ファイルを作成します。

logback.xml

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%-5p %d [%t] %m%n</Pattern>
        </layout>
    </appender>

    <appender name="file" class="ch.qos.logback.core.FileAppender">
        <file>example.log</file>
        <append>true</append>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%-5p %d [%t] %m%n</Pattern>
        </layout>
    </appender>

    <root>
        <level value="info" />
        <appender-ref ref="stdout" />
        <appender-ref ref="file" />
    </root>
</configuration>

移行しやすいように設計されていて、渡すパラメータは log4j.xml で使用するものと同じでした。 といっても今設定しているのは基本的なものだけですけど。 0.9.2 の時点では DailyRollingFileAppender はありませんでした。

次にクライアントプログラム。 パラメータ渡しに対応しているようです。

{} の数と引数の数が対応するようです。

クライアントプログラム

package net.pshared.logging;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LoggingClient {

    private static Logger logger = LoggerFactory.getLogger(LoggingClient.class);

    /**
     * @param args
     */
    public static void main(String[] args) {
        logger.debug("hello.");
        logger.info("{}. {}.", new Object[] { "hoge", "fuga" });
    }
}

実行結果

INFO  2007-03-09 01:58:20,938 [main] hoge. fuga.

プロジェクト直下に同じ内容の example.log が生成されています。

log4j 以外のロギングを使う場合は CLASSPATH に通す jar ファイルを 切り替えることで、ロギングライブラリも切り替えられるっぽいです。

まだまだ実践投入はなさそうですけど有名なプロダクツが移行し始めているようなので 移行時期も早めにくるのかなー。

Logback のライセンスは LGPL なので、ちょっと微妙かもしれません。