Q1:ログの組み込み方法は?

ログを出力するすべてのクラスで、 static に Logger インスタンスを生成します。
Logger インスタンスの生成は Logger#getLogger() で行い、引数には通常自分自身のクラスオブジェクトを与えます。

private static final Logger logger = Logger.getLogger(LogTest.class);

このように各クラスの Logger が自分自身のクラスオブジェクトを引数にして初期化されることによって、後からクラス単位、パッケージ単位でログ出力を制御することが可能になります。この Logger クラスは Log4j のパッケージ内のクラスであるため、以下の import 文を各クラスに追加する必要があります。

import org.apache.log4j.Logger;

ログ出力には、 org.apache.log4j.Category クラスのメソッドを使います。 Log4j でデフォルトで用意されているログレベル(TRACE, DEBUG, INFO, WARN, ERROR, FATAL) 毎にメソッドが用意されているので、出力レベルに合わせて使い分けます(TRACEレベルのログを出力するtrace()メソッドのみLoggerクラスに定義されています)。以下はログレベル INFO でログを出力するコードです。 Logger は Category を継承しているので、 Logger クラスのインスタンスを使って Category クラスのメソッドを呼び出すことができます。

logger.info("Application Start");

これらを使ったサンプルは以下になります。

import org.apache.log4j.Logger;

public class LogTest {
    private static final Logger logger = Logger.getLogger(LogTest.class);
        
    public static void main(String[] args) {
        logger.info("Application Start");
    }
}

Logger#getLogger() の引数には、クラスオブジェクト以外に、任意の文字列を与えることも可能です。これはパッケージの異なる複数のクラス郡を一括で制御したい場合に使います(ex. Aパッケージの Foo クラスと B パッケージの Bar クラスの出力するログを同じファイルへ出力する場合)。詳細は ログ出力全般 Q4:パッケージの異なる複数のクラスをグループ化する方法は? を参照して下さい。


トップページへ戻る