1. 依存関係の追加
Mavenプロジェクトのpom.xmlに以下の依存関係を追加します:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.1</version>
</dependency>
2. 設定ファイルの作成
クラスパス直下にlog4j2.xmlを作成します:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="FILE_LOGGER" fileName="logs/application.log" append="true">
<PatternLayout pattern="%d{yyyy-MM-dd} %p %c{1} [%t] %m%n"/>
</File>
</Appenders>
<Loggers>
<Logger name="com.example" level="debug" additivity="false">
<AppenderRef ref="FILE_LOGGER"/>
<AppenderRef ref="STDOUT"/>
</Logger>
<Root level="debug">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
3. ロギングの実装
JavaクラスでLoggerを使用します:
package com.example;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class ApplicationLogger {
private static final Logger logger = LogManager.getLogger(ApplicationLogger.class);
public static void main(String[] args) {
logger.trace("トレースレベルメッセージ");
logger.debug("デバッグレベルメッセージ");
logger.info("情報レベルメッセージ");
logger.warn("警告レベルメッセージ");
logger.error("エラーレベルメッセージ");
logger.fatal("致命的エラーレベルメッセージ");
}
}
4. 高度な設定例
ログレベル別のファイル出力設定:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Appenders>
<Console name="CONSOLE_APPENDER" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss.SSS}] [%p] - %c - %m%n"/>
</Console>
<RollingFile name="INFO_LOGGER"
fileName="logs/info.log"
filePattern="logs/archive/info-%d{yyyy-MM-dd}-%i.log.gz">
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %p %c{1} - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="50MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
<RollingFile name="ERROR_LOGGER"
fileName="logs/error.log"
filePattern="logs/archive/error-%d{yyyy-MM-dd}-%i.log.gz">
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %p %c{1} - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="20MB"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="CONSOLE_APPENDER"/>
<AppenderRef ref="INFO_LOGGER"/>
<AppenderRef ref="ERROR_LOGGER"/>
</Root>
</Loggers>
</Configuration>