Eclipseでlog4jを使ってログ出力ができるように前準備をする。


この記事は、Eclipseでorg.apache.log4jパッケージを使用してログ出力ができるようにする為の前準備について記載したものです。

1.まずは、log4j パッケージ(ここではlog4j-1.2.17.zip) を以下のサイトからダウンロードします。
http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.17/log4j-1.2.17.zip

2.log4j-1.2.17.zip ファイルを解凍して、log4j-1.2.17.jarファイルをプロジェクトの外部ライブラリに追加します。
Eclipseの画面より
+ 該当するプロジェクトを右クリック->プロパティをクリック
+ Javaのビルド・パスをクリック->ライブラリ-(L)タブ->外部JARの追加
+ ファイル選択画面より、log4j-1.2.17.jar を開く
+ 適用して閉じるをクリック
 これで、プロジェクトで log4j を使ったログ出力ができる環境が整いました。

簡単なプロジェクトでログ出力されるかテストしてみます。
※上記で、外部JARが追加されていないと、org.apache.log4j.* のクラスが取り込めないのでその部分は大丈夫そうです。

package test.project;
import org.apache.log4j.Logger;

public class TestClass {
public static void main(String[] args) {
Logger logger = Logger.getLogger(TestClass.class.getName());
// ログ出力
logger.info("This is info.");
}
}

実行すると、あれ、ログ出力されません。以下のエラーが出力されます。
log4j:WARN No appenders could be found for logger (test.project.TestClass).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
調べてみると、どうやら、このエラーは、test.project.TestClass でログ出力の設定が見つからないので、設定してくれというエラーのようです。
設定方法としては、プロパティファイル(log4j.properties)とXMLファイル(log4j.xml)で設定する方法があるので、今回は、XMLファイルを使用します。

3.log4j.xml ファイルを作成する。(作成場所は、ソースファイルと同じ場所)
デフォルトで < appender name="stdout" > ~ </ appender > の部分は、ネットにあったのでそのままパクリます。
< category name=*** > ~ </ category > の部分が新規に作成した定義です。*** はクラス名ではなく、パッケージ名(今回の場合、"test.project" になります。)

< ?xml version="1.0" encoding="UTF-8" ?>
< !DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
< log4j:configuration xmlns:log4j="" class="autolink">http://jakarta.apache.org/log4j/">
< appender name="stdout" class="org.apache.log4j.ConsoleAppender">
< param name="Target" value="System.out" />
< layout class="org.apache.log4j.PatternLayout">
< param name="ConversionPattern" value="%d{yyyy/MM/dd HH: mm:ss SSS} %5p %5t %c{1} - %m%n" />
< /layout>
< /appender>

< category name="test.project" >
< appender-ref ref="stdout" />
< /category>

< /log4j:configuration >

これでまた実行してみます。あれ、また出ます。
log4j:WARN No appenders could be found for logger (test.project.TestClass).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
何でまだエラーになるんだ?といろいろ調べてみると、クラスパスが通っていない場所に log4j.xml がある為、見れていないようです。

public class TestClass {
public static void main(String[] args) {
Logger logger = Logger.getLogger(TestClass.class.getName());
// 追加して確認<ここから>
URL fileXmlUrl = Loader.getResource("log4j.xml");
DOMConfigurator.configure(fileXmlUrl); // <-- fileXmlUrl が null
// 追加して確認<ここまで>
// ログ出力
logger.info("This is info.");
}
}

4.log4j.xml ファイルの場所にクラスパスを設定する。
+ 該当するプロジェクトを右クリック->プロパティをクリック
+ Javaのビルド・パスをクリック->ライブラリ-(L)タブ->外部クラスフォルダの追加
+ 外部クラスフォルダーの選択->log4j.xmlがあるフォルダ(今回はsrcフォルダ)を選択->OKをクリック
+ 適用して閉じるをクリック
 これで、プロジェクトで log4j を使ったログ出力ができる環境が整いました。

これでまず上で実行したソースを動かすと、null ではなく、値が入って取れてます。
次に追加した部分を削除して動かすと、今度はちゃんと動きますね。

2017/XX/XX 14:56:09 781 INFO main TestClass - This is info.