JavaEtc > log4j

Log4J

Log4Jとは

  • Jakartaプロジェクトで開発が進められているJavaプログラム用のログAPIである。
  • ログの出力先を様々に設定できる。
    • ファイル、OutputStream、java.io.Writer、リモートLog4Jサーバ、リモートUnix Syslogデーモン、NTイベントログなど
  • Log4Jには以下の3つの主要コンポーネントがある。
    • Logger - ロギングを行う部分をグループ化し必要なグループのログだけを出力することを可能にする。カテゴリーに優先順位を付けることにより様々な出力方法を指定できる。
    • Appender - ログの出力先を指定する。
    • Layout - ログの出力フォーマットを指定する。
  • Log4Jは以下のログレベルを標準提供している(レベルが高い順)。利用者が任意のログレベルを追加することも可能。
    • FATAL - 致命的なエラー。プログラムの異常終了を伴うようなもの。
    • ERROR - 予期しないその他の実行エラー。
    • WARN - 警告。廃要素のAPIの使用やAPIの不適切な使用、エラーに近い事象など。
    • INFO - 情報。実行時の何らかの注目すべき事象(開始や終了など)。
    • DEBUG - デバッグ用の情報。システムの動作状況に関する詳細な情報。
    • TRACE - デバッグ情報よりも更に詳細な情報。
  • 使うときのざっくりした流れは以下な感じ。
    • 1.Loggerを作成する
    • 2.Appenderを作成してLoggerにぶら下げる
    • 3.Layoutを作成して、Appenderにぶら下げる
    • 4.ログ出力をする。
  • 上記手順の1~3(2~3?)は設定ファイル(log4j.properties)で外部ファイル化できる。

サンプルコード

  • 上記までに学んだ内容でログ出力を行うサンプルコードを書いた。
  • Log4jSample.java
package sandbox.log4j.sample1;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class Log4jSample {

  public static void main(String[] args) {
    Log4jSample mainApp = new Log4jSample();
    mainApp.execute();
  }

  public void execute() {
    // Loggerインスタンスの生成.
    Logger logger = Logger.getLogger(Log4jSample.class);

    // log4j.propertiesを読み込む
    PropertyConfigurator.configure("bin/sandbox/log4j/sample1/log4j.properties");

    // 各レベルでログを出力
    logger.trace("TRACEログ");
    logger.debug("DEBUGログ");
    logger.info("INFOログ");
    logger.warn("WARNログ");
    logger.error("ERRORログ");
    logger.fatal("FATALログ");
  }
}
  • log4j.propertes
# Appenderの定義.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %5p %c{1} - %m%n

log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=C:\\Log4JTest\\Log4jSample.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %5p %c{1} - %m%n

# ルートカテゴリーの定義.
log4j.rootCategory=INFO,stdout,file
  • 実行するとコンソールには以下のとおりログが出力される。
2011-09-22 12:07:28,144  INFO Log4jSample - INFOログ
2011-09-22 12:07:28,144  WARN Log4jSample - WARNログ
2011-09-22 12:07:28,144 ERROR Log4jSample - ERRORログ
2011-09-22 12:07:28,144 FATAL Log4jSample - FATALログ
  • また、C:\\Log4JTest\\Log4jSample.logのファイルに上記と同じ内容のログが出力される。
  • サンプルコードを書いて
    • rootCategory?rootLogger?という感じ。カテゴリ、ロガー、階層、log4j.propertiesの書き方などがまだよくわからん。
    • 以下のように明示的にlog4j.propertiesの読み込みを記述しないと上手くいかなかった。(Webアプリケーションの場合クラスパスが通った場所にlog4j.propertiesを書いておけばこのようなコードは不要だったような気がしたが・・・)
// log4j.propertiesを読み込む
PropertyConfigurator.configure("bin/sandbox/log4j/sample1/log4j.properties");

参考サイト

最終更新:2011年11月08日 23:51