Java
Eclipse
log4j
ファイル出力
両方

Eclipseでlog4jを使ってファイルとコンソールの両方にログ出力ができるようにする。

この記事は、Eclipseでorg.apache.log4jパッケージを使用して、ファイルとコンソールの両方にログ出力ができるようにする為の方法について記載したものです。

この記事を読む前にlog4jのパッケージを使用してログ出力ができる環境が整っていない場合、以下のリンクを参考に環境を作成する必要があります。
参考記事:https://qiita.com/toolate32/items/538f3a99d23a7a1f29bd

1.まずは、以下の簡単なプロジェクトでログ出力を確認してみます。

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.");
}
}

とりあえず、コンソールには出力されています。
コンソール出力:
2017/XX/XX 14:56:09 781 INFO main TestClass - This is info.

現在の log4j.xml の内容は以下になっています。
1:< ?xml version="1.0" encoding="UTF-8" ?>
2:< !DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
3:< log4j:configuration xmlns:log4j="" class="autolink">http://jakarta.apache.org/log4j/" >
4:< appender name="stdout" class="org.apache.log4j.ConsoleAppender">
5:< param name="Target" value="System.out" />
6:< layout class="org.apache.log4j.PatternLayout">
7:< param name="ConversionPattern" value="%d{yyyy/MM/dd HH: mm:ss SSS} %5p %5t %c{1} - %m%n" />
8:< /layout>
9:< /appender>
10:< category name="test.project" >
11:< appender-ref ref="stdout" />
12:< /category>
13:< /log4j:configuration>

2.log4j.xml の設定をコンソール、ログファイルの両方に出力されるように追加する。
上記の設定ファイルは、4~9行目はコンソール出力定義、10~12行目はパッケージ test.project 内でのログ出力の設定を指定しています。11行目で apender-ref を "stdout" としているので、4~9行目定義のログ出力が行われます。
これにファイル出力の定義とファイル出力を行うには、以下の定義を追加します。

1:< ?xml version="1.0" encoding="UTF-8" ?>
2:< !DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
3:< log4j:configuration xmlns:log4j="" class="autolink">http://jakarta.apache.org/log4j/" >
4:< appender name="stdout" class="org.apache.log4j.ConsoleAppender">
5:< param name="Target" value="System.out" />
6:< layout class="org.apache.log4j.PatternLayout">
7:< param name="ConversionPattern" value="%d{yyyy/MM/dd HH: mm:ss SSS} %5p %5t %c{1} - %m%n" />
8:< /layout>
9:< /appender>
4-1:< appender name="fileout" class="org.apache.log4j.FileAppender">
5-1:< param name="File" value="logTest.log" />
6-1:< layout class="org.apache.log4j.PatternLayout">
7-1:< param name="ConversionPattern" value="%d{yyyy/MM/dd HH: mm:ss SSS} %5p %5t %c{1} - %m%n" />
8-1:< /layout>
9-1:< /appender>
10:< category name="test.project" >
11:< appender-ref ref="stdout" />
11-1:< appender-ref ref="fileout" />
12:< /category>
13:< /log4j:configuration>

追加した箇所は、4-1~9-1、11-1です。4-1~9-1でファイル出力定義、11-1行目で apender-ref を "fileout" としているので、4-1~9-1行目定義のログ出力が行われます。

これで、試しに上のソースを動かしてみると、今度はコンソールとログファイルの両方に出力されていますね。

※コンソール出力
2017/XX/XX 20:37:17 689 INFO main TestClass - This is info.

※ログファイル出力(logTest.log)
2017/XX/XX 20:26:59 660 INFO main TestClass - This is info.
2017/XX/XX 20:37:17 689 INFO main TestClass - This is info.