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

log4j2とxmlの設定ファイルを使用してテキストファイルにログを出力するサンプル(手順)です。
(確認環境:Java 8,Eclipse 4.8,Windows10)

目次

サンプル log4j 2とは
  log4j 2の取得方法
  設定ファイルの作成(log4j2.xml)
  log4j 2でログを出力するコード
  出力ファイルの確認

log4j 2とは

log4j 2の取得方法

1.Mavenで取得する場合

pom.xmlの<dependencies>の間に以下のコードを追加します。

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-core</artifactId>
	<version>2.17.0</version>
</dependency>

※mvnrepositoryのサイトで最新のバージョンか確認して下さい。
https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core

Mavenで取得する手順は、以下を参照願います。
Eclipse Mavenでjarを取得(Java)

 

2.jarファイルで取得する場合

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

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

ダウンロードしたzipを展開して任意の場所に配置しjarファイルをクラスパスに追加します。
・log4j-api-2.xx.x.jar
・log4j-core-2.xx.x.jar

クラスパスに追加する手順は、以下を参照願います。
Eclipse jarファイルをクラスパスに設定する方法

 

設定ファイルの作成(log4j2.xml)

log4j2.xmlというファイルを作成しコードを記述します。
log4j1系であったテキスト(log4j.properties)での設定は廃止されました。

<?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">./log/testlog.log</Property>
        <Property name="logfile-archive">./log/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>

各タグの説明は以下のとおりです。

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

xmlファイルの配置先

フォルダを作成してフォルダにビルドパスを追加しその中にlog4j2.xmlを置きます。
Eclipse フォルダを作成してビルドパスに設定する手順

 

log4j 2でログを出力するコード

package test1;

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

public class Test1 {
	public static void main(String[] args) {

		Logger logger = LogManager.getLogger();

		logger.trace("Start"); // 2017/01/21 06:02:17.154 [main] TRACE test1.Sample Start
		
		int a = 1;
		int b = 2;
		
		logger.trace("End"); // 2017/01/21 06:02:17.172 [main] TRACE test1.Sample End
		logger.debug("debug"); // 2017/01/21 06:02:17.157 [main] DEBUG test1.Sample debug
		logger.info("情報={}", a); // 2017/01/21 06:02:17.159 [main] INFO test1.Sample info=1
		logger.warn("警告={},={}", a, b); // 2017/01/21 06:02:17.159 [main] WARN test1.Sample warn=1,=2
	
		try {
			throw new NullPointerException();	
		}catch(Exception e) {
			logger.error("エラー", e); // 2017/01/24 18:19:02.516 [main] ERROR Sample エラー
		}                          // java.lang.NullPointerException: null
	}
}

9行目は、LogManagerクラスのインスタンスを取得しています。
getLoggerの引数はありません。この場合ログにパッケージ名とクラス名が出力されます。
24行目は、例外のインスタンスを引数にしています。

 

出力ファイルの確認

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

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

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

関連の記事

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

△上に戻る