メソッドを呼び出すだけではない
SLF4J+Logbackの使い方。

ロガーの取得

LoggerFactory.getLogger()でLoggerを取得する。
このとき、引数の指定によって大きく2つに分かれる。

  • 自分のクラスを引数に渡す方法
  • ロガーの名前を指定する方法

基本的には、前者の「自分のクラスを引数に渡す方法」がよい。
理由としては次のようなものがある。

  • logbakck.xmlでのロガーのフィルタリングの際に、
    クラス名もしくはパッケージ名でフィルタリングできる。
  • このとき、名前を指定しているとその名前でフィルタリングすることになる。
    よって、つけた名前をしっかり覚えていなくてはいけない。

よって、ロガーの名前を指定する場合は、
通常のログとは別の特別なログ出力するときなどでよい。

クラスを引数に渡す場合
public class LogOutputTest {
    private static final Logger log = LoggerFactory.getLogger(LogOutputTest.class);
}
名前を引数に渡す場合
public class MyNameLoggerTest {
    private static final Logger log = LoggerFactory.getLogger("mylogger.debug");
}

テンプレートに登録する

クラスを作るごとにLoggerを作ることになるので、
Eclipseなどでは自動生成されるクラスのテンプレートに追加するのがベター。

Eclipseの「設定」-「コード・テンプレート」の「コード」-「新規クラスファイル」。

${filecomment}
${package_declaration}
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
${typecomment}
${type_declaration}

Eclipseの「設定」-「コード・テンプレート」の「コード」-「クラス本文」。

@SuppressWarnings("unused")
private static final Logger log = LoggerFactory.getLogger(${type_name}.class);

ログの出力

それぞれのメソッドは、ログレベルに対応している。

また、例外を受け取るメソッドも用意されていて、
その場合スタックトレースがログに出力される。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
public class LogOutputTest {
    private static final Logger log = LoggerFactory.getLogger(LogOutputTest.class);
 
    @Test public void test_outputLog() throws Exception {
        log.trace("traceです。");
        log.debug("debugです。");
        log.info("infoです。");
        log.warn("warnです。");
        log.error("errorです。");
 
        try {
            // 何らかの処理
        } catch (Exception e) {
            log.warn("○○で例外発生です。", e);
        }
    }
}

ログ文字列に「{}」を
プレースホルダーとして利用することもできる。

プレースホルダー利用例
int number01 = 1234;
int number02 = 5678;
log.debug("この数値は{}と{}です。", number01, number02);
出力
20:00:33 DEBUG - この数値は12345678です。

PR