Java log4j2でテキストにログを出力するサンプル

log4j2とxmlの設定ファイルを使用してテキストファイルにログを出力するサンプル(手順)です。

実行環境
・Windows10
・JDK 9.0.1/8
・eclipse 4.7/4.6
・log4j-api-2.11.0.jar
・log4j-core-2.11.0.jar

目次

log4j 2

 

1.jarファイルの取得

以下のサイトからapache-log4j-2.11.0-bin.zipをダウンロードします。

Apache log4j2のサイト
http://logging.apache.org/log4j/2.x/download.html

ダウンロードしたzipを展開し以下のファイルを任意の場所に配置します。
・log4j-api-2.11.0.jar
・log4j-core-2.11.0.jar

 

2.jarファイルをクラスパス(ビルドパス)に追加

log4j-api-2.11.0.jarとlog4j-core-2.11.0.jarをクラスパスに追加します。
クラスパスに追加する手順は、以下を参照願います。
Eclipse 外部jarファイルをクラスパス(ビルドパス)に設定する方法

 

3.設定ファイルの作成

log4j2.xmlというファイルを作成しコードを記述します。文字コードはUTF-8にします。
log4j1系であったテキスト(log4j.properties)での設定は廃止されました。
各タグの説明は以下のとおりです。

タグ 説明
Properties 変数の設定
nameの値を変数として使用しています。(例:7行目のformat1は、25行目で使用されている)
ログのフォーマット出力形式は以下のlog4j2公式サイトを参照。
http://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout
Appenders 出力先の設定
ログをコンソールとファイルに出力し、出力形式の指定をしています。
ファイルはローテションの設定をしています。
Loggers ログレベルの設定。
コンソールとファイルにtrace以上のログを出力する設定をしています。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project>  
<Configuration status="off">

	<!-- Propertiesは、nameの値を変数として使える -->
    <Properties>
        <Property name="format1">%d{yyyy/MM/dd HH:mm:ss.SSS} [%t] %-6p %c{10} %m%n</Property>
       <!-- ログのフォーマット 
   		%dは日時。{}に日時の形式を指定
   		%tはスレッド名
   		%-6pはログレベル名称を左詰めで6文字分出力する。「debug」であれば後ろに空白1文字が追加される。
   		    但し、%-3pとしても名称は削られず「debug」として出力される。%6と-をとると右づめになる。
   		%c{x}は,例えばロガー名がorg.apache.commons.Fooのとき%c{2}の場合、commons.Fooが出力される
   		%mはログメッセージ
   		%nは改行
      -->
        <Property name="logfile">d:/logs/testlog.log</Property>
        <Property name="logfile-archive">d:/logs/testlog_%d{yyyy-MM-dd}-%i.log</Property>
    </Properties>
    
	<Appenders>
		<!-- コンソールに出力する設定 -->
		<Console name="Console" target="SYSTEM_OUT">
			<PatternLayout>
				<pattern>${format1}</pattern>
			</PatternLayout>
		</Console>

		<!-- ファイルに出力する設定 -->
		<RollingFile name="logfile001" append="true" fileName="${logfile}"
			filePattern="${logfile-archive}">
			<PatternLayout>
				<pattern>${format1}</pattern>
			</PatternLayout>
			<Policies>
				// 1kBに達したらローテーションのファイルを作成する
				<SizeBasedTriggeringPolicy size="1KB"/>
			</Policies>
			// ローテーションのファイルは、3つ持つ
			<DefaultRolloverStrategy max="3"/>
		</RollingFile>
	</Appenders>
	
	<Loggers>
		// trace以上のログを出力する
		<Root level="trace">
			<AppenderRef ref="Console" />
			<AppenderRef ref="logfile001" />
		</Root>
	</Loggers>
</Configuration>

log4j2.xmlをビルドパスに設定

log4j2.xmlファイルが完成したらビルドパスに設定します。
フォルダを作成してそのフォルダにビルドパスを追加しその中にlog4j2.xmlを置きます。
フォルダを作成してビルドパスを追加する方法は、以下を参照願います。
Eclipse フォルダを作成してビルドパスに設定する手順

 

4.ソースコードの作成

テキストファイルにログを出力するコードです。
13行目は、LogManagerクラスのインスタンスを取得しています。変数の型のLoggerはインターフェースです。
17,23-26,28行目は、ログをテキストに出力します。

package test1;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/**
 * log4j2 ログを出力するサンプル
 */
class Sample {
	
	//getLoggerの引数はロガー名を指定する。
	//log4j2では、ロガー名の指定が省略可能になった。
	private Logger logger = LogManager.getLogger();

	void runSample() {

		logger.trace("Start"); //2017/01/21 06:02:17.154 [main] TRACE  test1.Sample Start

		int a = 1;
		int b = 2;
		String c = null;

		logger.debug("debug"); //2017/01/21 06:02:17.157 [main] DEBUG  test1.Sample debug
		logger.info("info={}",a); //2017/01/21 06:02:17.159 [main] INFO   test1.Sample info=1
		logger.warn("warn={},={}" ,a,b); //2017/01/21 06:02:17.159 [main] WARN   test1.Sample warn=1,=2
		logger.error("error={}",c); //2017/01/21 06:02:17.171 [main] ERROR  test1.Sample error=null
		
		logger.trace("End"); //2017/01/21 06:02:17.172 [main] TRACE  test1.Sample End
	}
}
public class Test1 {
	public static void main(String[] args) {
		Sample s = new Sample();
		s.runSample();
	}
}

 

5.出力ファイルの確認

実行するとコンソールとファイルにログが出力されます。
出力されるログは以下の通りです。

2017/01/22 09:58:46.004 [main] TRACE test1.Sample Start
2017/01/22 09:58:46.006 [main] DEBUG test1.Sample debug
2017/01/22 09:58:46.007 [main] INFO test1.Sample info=1
2017/01/22 09:58:46.007 [main] WARN test1.Sample warn=1,=2
2017/01/22 09:58:46.325 [main] ERROR test1.Sample error=null
2017/01/22 09:58:46.326 [main] TRACE test1.Sample End

 

何度も実行するとファイルローテションの設定のとおり、現ファイルと+過去3ファイルが出力されます。

関連の記事

Java LogbackとSLF4jでテキストにログを出力するサンプル
Java log4j 1.2でテキストにログを出力するサンプル(設定ファイルがテキスト)
Java log4j 1.2でテキストにログを出力するサンプル(設定ファイルがxml)
Java log4j 1.2でコンソールにログを出力するサンプル

 はまったらエンジニア特化型Q&Aサイト
【teratail(テラテイル)】で質問しましょう!


△上に戻る