基本操作
ここでは、Log4Jの概要、インストール方法について解説します。
- 実行環境
-
- ・WindowsXP Home Edition
- ・J2SDK 1.4.2_04
- ・Log4J 1.2.8
例題
例題では、読み込むファイルが存在しない場合にwarnレベルのログを生成するプログラムと、変数にある一定値以上の値が代入された場合にinfoレベルのログを生成するプログラムを作成します。ログはlog.txtに生成します。

ソースファイルの作成
例題で使用するソースファイルを作成します。ソースファイルにLog4Jの処理を埋め込むためには以下の処理を行います。
- ログ生成を行う。Loggerオブジェクトの生成
- Log4J設定ファイルの読み込み
- ログ生成を行うfatal、error、warn、info、debugメソッドの記述(それぞれのログレベルの位置付けはプログラマの判断に任せられます。warnレベルを致命的なエラーとするか、リカバリ処理の必要のないエラーとするかなどです。)
ExLog1.java
package example;
import org.apache.log4j.*;
import org.apache.log4j.xml.*;
import java.io.*;
public class ExLog1 {
//(1)Loggerオブジェクトの生成
static Logger log = Logger.getLogger(ExLog1.class.getName());
public static void main(String[] args) {
//(2)設定ファイルの読み込み
DOMConfigurator.configure("log4j.xml");
ExLog1 obj1 = new ExLog1();
ExLog2 obj2 = new ExLog2();
obj1.methodA();
obj2.methodB();
}
void methodA() {
try {
FileReader in = new FileReader("test.txt"); //(3)
} catch(IOException e) {
log.warn("エラー:" + e); //(4)warnメソッドの記述
}
}
}
- (1)Loggerオブジェクトlogを生成します。ログ生成の中心となるオブジェクトです。どのメソッドからも共通に参照できるようにstaticなメンバ変数として生成します。getLoggerメソッドの引数にはクラス名を指定します。
- (2)DOMConfigurator.configureメソッドを使用し、設定ファイル(log4j.xml)を読み込みます。
- (3)FileReaderオブジェクトinを生成する際、ファイルtest.txtを読み込みます。例外が発生した際、catch節内を実行します。
- (4)warnメソッドにより、ログを生成します。
ExLog2.java
package example;
import org.apache.log4j.*;
public class ExLog2 {
//(1)Loggerオブジェクトの生成
static Logger log = Logger.getLogger(ExLog2.class.getName());
void methodB() {
int x = 20;
if(x > 10) {
log.info("変数は10以上です。"); //(2)infoメソッドの記述
}
}
}
- (1)Loggerオブジェクトlogを生成します。
- (2)infoメソッドにより、変数xが10以上の場合、"変数は10以上です。"というログメッセージを生成します。
設定ファイルの作成
XML形式でLog4Jの設定ファイルを作成します。「プロパティ = 値」のテキスト形式で作成することもできますが、ここではXML形式で作成します。設定項目は主にappender、layout、categoryの3つです。
- appender
- ログ生成先を指定します。ログ生成先はコンソール、ファイル、Syslogデーモン、メール、データベースなどを指定できます。 appenderの設定変更によりログ生成先を柔軟に変更できます。
- layout
-
%c、%dなどの置換え文字を使用し、ログフォーマットを指定します。
置換え文字
置換え文字 内容 %c ログ生成が行われたカテゴリ名を出力します。 %d ログ生成の日時を指定します。%d{yyyy/mm/dd}など細かく指定できます。 %L ログ生成を行った行番号を出力します。 %m ロギングイベントのメッセージを出力します。 %M ログ生成が行われたメソッド名を出力します。 %p ログ生成の優先度を出力します。 %r アプリケーションを実行してからログ生成が行われるまでの経過時間を出力します。 %t ログ生成が行われたスレッド名を出力します。 - category
- categoryタグではログ生成の範囲、適用するappenderタグ、ログレベルなどを指定します。ログレベルによりwarnを指定した場合、ソースファイルにwarnレベルより低いレベルのログ生成(info、debug)が記載されていた場合でもそのログが生成されることはありません。
以下は例題で使用する設定ファイル(log4j.xml)です。
log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<!-- (1)appenderの設定 -->
<appender name="FILE" class="org.apache.log4j.FileAppender">
<param name="File" value="log.txt" />
<!-- (2)layoutの設定 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy/mm/dd} %p:%r:%c:%m%n" />
</layout>
</appender>
<!-- (3)categoryの設定 -->
<category name="example">
<priority value="info" />
<appender-ref ref="FILE" />
</category>
</log4j:configuration>
- (1)appenderタグのname属性に任意のappender名を、class属性に使用するappenderクラスを指定します。FileAppenderはファイルにログを生成するappenderクラスです。paramタグのうち、name属性Fileのものはvalue属性に出力するファイル名を指定します。
- (2)layoutタグのclass属性に、使用するLayoutクラスを指定します。 paramタグのうち、name属性ConversionPatternのものはvalue属性に生成するログフォーマットを指定します。
- (3)categoryタグのname属性に対象とするログ生成範囲を指定します。指定範囲はLoggerオブジェクト生成の際、getLoggerメソッドの引数に指定したクラス名です。ここでは、パッケージexampleを指定しパッケージ内のすべてのクラスをログ生成範囲としています。priorityタグでは、そのcategoryで適用されるログレベルを指定します。appender-refタグではそのcategoryで適用されるappenderを指定します。
設定ファイルの作成
Log4Jを実行します。
- ファイルの配置
- 作成したソースファイル、設定ファイルを以下のように配置します。
- 実行、コンパイル
- CLASSPATHにlog4j-1.2.8.jarを指定してソースファイル(ExLog1.java、ExLog2.java)をコンパイル、実行します。カレントディレクトリにlog.txtが作成され、ログが生成されていることを確認してください。
# コンパイル D:\JAVA\example>javac -classpath D:\JAVA\log4j-1.2.8.jar;. *.java D:\JAVA\example>cd .. # 実行 D:\JAVA>java -classpath D:\JAVA\log4j-1.2.8.jar;. example.ExLog1 D:\JAVA>
2基本操作