logback+slf4jでログの出力をコントロール

logbackを使用することになったのでlogbackとslf4jの設定方法をメモ代わりに記述してみました。

log4jは開発終了らしく今後はlogbackを推奨らしい。
SLF4Jとlogbackを利用しロギングする仕組みが今後のスタンダードになるのだろうか?

SLF4JからSLF4Jをダウンロードし、
Logback Homeからlogbackをダウンロードする。

今回利用したのはlogbakが0.9.14でSLF4Jが1.5.6を利用しました。
アーカイブを展開するとjarがめちゃめちゃ一杯でます。
正直どれを使っていいのか悩みました。

logback:
logback-access-0.9.14.jar
logback-classic-0.9.14.jar
logback-core-0.9.14.jar

slf4j:
integration-1.5.6.jar
jcl-over-slf4j-1.5.6.jar
jul-to-slf4j-1.5.6.jar
log4j-over-slf4j-1.5.6.jar
slf4j-api-1.5.6.jar
slf4j-ext-1.5.6.jar
slf4j-jcl-1.5.6.jar
slf4j-jdk14-1.5.6.jar
slf4j-log4j12-1.5.6.jar
slf4j-migrator-1.5.6.jar
slf4j-nop-1.5.6.jar
slf4j-simple-1.5.6.jar

今回は利用したjarはlogback-classic-0.9.14.jar,logback-core-0.9.14.jar,slf4j-api-1.5.6.jarの三つを利用しました。
以下がサンプルプログラムになります。

[TestLogging.java]

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;

import junit.framework.TestCase;

public class TestLogging extends TestCase {

    protected static Logger log = LoggerFactory.getLogger(TestLogging.class);
    protected static Marker marker = MarkerFactory.getMarker(TestLogging.class.getName());

    public TestLogging() {
    }

    public void testPutLog() {    

        // 各ログの出力
        log.trace("trace");
        log.debug("debugdebug");
        log.info("info");
        log.warn("warnnnnnnnn!");
        log.error("ERRORRRRRRRRRRRRRRRR!");

        // makerを利用した出力

        Object[] yarumi = new Object[]{"やる美",new Integer(30),"普通"};
        Object[] yaranaio = new Object[]{"やらない夫",new Integer(60),"セレブ"};
        Object[] yaruo = new Object[]{"やる夫",new Integer(10),"ワープア"};

        log.info( marker, "{}の今月の給料は{}万円で{}です",  yarumi);
        log.info( marker, "{}の今月の給料は{}万円で{}です",  yaranaio);
        log.info( marker, "{}の今月の給料は{}万円で{}です",  yaruo);

    }
}

設定ファイルはxml一本になったらしくpropertiesファイルは見捨てられたみたいです。
ファイル名はlogback.xmlとしクラスパス上に設置します。

[logback.xml]

<!--
  logback の設定ファイル

  アペンダはこちらのドキュメントを参考に

http://logback.qos.ch/manual/appenders.html

  レイアウトはこちらを参考にどうぞ

http://logback.qos.ch/manual/layouts.html

  -->
<configuration>

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">

    <!-- ファイル名 -->
    <file>debug.log</file>    

    <!-- パターンレイアウト -->
    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>
        %date{MM/dd hh:mm:ss:SSS} %logger{0} %-5.5level %-20.20method %-4.4line %msg%n
      </Pattern>
    </layout>
  </appender>

  <!-- logを標準出力に出力 -->
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

    <!-- ターゲットを標準出力へ -->
    <Target>System.out</Target>

    <!-- パターンレイアウト -->
    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>
        %date{MM/dd hh:mm:ss:SSS} %logger{0} %-5.5level %-20.20method %-4.4line %msg%n
      </Pattern>
    </layout>
  </appender>

  <!-- ログ出力に関する設定 -->
  <root>
    <!-- 出力するレベルを設定 -->
    <level value="debug" />

    <!-- アペンダを設定 -->
    <appender-ref ref="FILE" />
    <appender-ref ref="STDOUT" />
  </root>

</configuration>

以下が出力結果になります。

01/06 02:13:33:742 TestLogging DEBUG testPutLog           26   debugdebug
01/06 02:13:33:758 TestLogging INFO  testPutLog           27   info
01/06 02:13:33:758 TestLogging WARN  testPutLog           28   warnnnnnnnn!
01/06 02:13:33:758 TestLogging ERROR testPutLog           29   ERRORRRRRRRRRRRRRRRR!
01/06 02:13:33:758 TestLogging INFO  testPutLog           37   やる夫の今月の給料は10万円でワープアです
01/06 02:13:33:758 TestLogging INFO  testPutLog           38   やらない夫の今月の給料は60万円でセレブです
01/06 02:13:33:758 TestLogging INFO  testPutLog           39   やる美の今月の給料は30万円で普通です

上手にできました。
jdk1.4に対応する場合などはちょっとちがうのかもしれませんがとりあえずログ出力できました。

Tags: , , ,

This entry was posted on 火曜日, 1月 6th, 2009 at 2:43 PM and is filed under java, 備忘録. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a Reply