JavaアプリケーションにおけるLog4j2を使用したファイル出力ロギングの実装

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>

タグ: log4j2 Java ロギング ファイル出力 設定ファイル

7月8日 19:49 投稿