技術空間

log4j

log4jの導入&サンプルプログラム


TOP > log4j > log4jの導入&サンプルプログラム



■log4jの導入
jarのダウンロード

Apacheの公式サイト(http://logging.apache.org/log4j/1.2/)からjarファイルをダウンロードし、クラスパスへ通す。

■サンプルプログラム
設定ファイル

設定ファイルはプロパティファイル(log4j.properties)とXMLファイル(log4j.xml)の2種類から選べるが、まずはXMLのサンプル。 log4j.xmlを作成して、クラスパス直下に置く。

log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><!--①DTD宣言 -->
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" ><!--②名前空間 -->

    <!--③appender定義 -->
    <appender name="file" class="org.apache.log4j.FileAppender">
         <param name="File" value="./sample.log" />
         <param name="Append" value="true" />
         <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%m%n" />
         </layout>
    </appender>

    <!--③logger定義 -->
    <logger name="test.Sample>
        <level value="DEBUG"/>
        <appender-ref ref="file"/>
    </logger>

</log4j:configuration>

[説明]


<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">はdtdファイルの所在を記述する。dtdファイルが存在しないとEclipseで警告がでるが無視してよい。 実際はlog4jのjarファイルの中に入っている。(org/apache/log4j/xml/log4j.dtd)


②「xmlns:log4j="http://jakarta.apache.org/log4j/"」はlog4jの名前空間を表す。 他の名前空間が持つタグ名と競合しないための記述。このまま記述する。


③log4j.xmlを構成する主要なタグはappenderタグとloggerタグの2種類。

プログラムからはappenderではなく、loggerを介してログ出力を行う。


プログラム
Sample.java
package test;

import org.apache.log4j.Logger;

public class Sample {

    // ①Loggerを取得
    private static Logger logger = Logger.getLogger("test.Sample");
    
    public static void main(String[] args){
        // ②ログの出力
        logger.debug("sampleのログ");
    }
}

[説明]


①まず最初にLogger.getLoggerを使ってLoggerのオブジェクトを取得する。 なお一番最初にgetLoggerを呼んだタイミングでlog4j.xmlがロードされている。

getLoggerの引数はlog4j.xmlのloggerタグのname属性と合わせる。 実際はClassクラスを使ってLogger.getLogger(Sample.class)のような記述が一般的。 この場合、設定ファイルには<logger name="test>のようにパッケージまでを記述することが多い。loggerには前方一致機能があるので、 これでtestパッケージ配下全てのクラスが対象となる。以下サンプル。

Classクラスを利用した例(log4j.xml)
<logger name="test>
    <level value="DEBUG"/>
    <appender-ref ref="file"/>
</logger>
Classクラスを利用した例(プログラム)
private static Logger logger = Logger.getLogger(Sample.class);

なお出力先はloggerに紐づくappender(複数紐づけ可能)によって決定される。loggerとappenderの紐づきは<logger>タグの子要素<appender-ref>に定義する。


②出力する際は、Loggerのメソッドを利用する。 ログレベルに応じてtrace、debug、info、warn、error、fatalのメソッドが用意されている。

出力結果(sample.log)
sampleのログ


TOP > log4j

Tweet ̃Gg[͂ĂȃubN}[Nɒlj
技術空間