Log4j2とSLF4Jの統合

Log4j2とSLF4Jを使用してログ記録を設定する方法について説明します。
必要な依存関係、サンプル構成、およびログステートメントの使用例を見ていきます。

Log4j2とSLF4Jのバインディング依存関係

Log4j2とSLF4Jを組み合わせるには、以下の3つの依存関係を含める必要があります。

  • log4j-slf4j-impl.jar - Log4j 2のSLF4Jバインディング。これにより、SLF4J APIを使用したアプリケーションがLog4j2を実装として利用できます。
  • log4j-api.jar - ログ実装を作成するために必要なアダプターコンポーネントインターフェースを提供します。
  • log4j-core.jar - Log4jのコア実装クラスです。

Maven依存関係

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.22.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.22.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.22.0</version>
</dependency>

Gradle依存関係

dependencies {
  implementation 'org.apache.logging.log4j:log4j-api:2.20.0'
  implementation 'org.apache.logging.log4j:log4j-core:2.20.0'
  implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0'
}

ログファイルの設定

ログ記録器とアペンダーを設定するために、log4j2.properties、log4j2.xml、またはlog4j2.jsonファイルを使用できます。
設定ファイルはリソースフォルダやアプリケーションクラスパスに配置します。すべてのログステートメントはこれらの記録器を使用して記録されます。

ここではXML設定を使用し、コンソールログ記録をデモします。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
    <Properties>
        <Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n</Property>
    </Properties>
 
    <Appenders>
        <Console name="console" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </Console>
    </Appenders>
 
    <Loggers>
        <Root level="info">
            <AppenderRef ref="console"/>
        </Root>
    </Loggers>
</Configuration>

アプリケーションコードでLoggerとLoggerFactoryを使用してログステートメントを記述します。
これらのクラスはorg.slf4jパッケージに属しています。

// MyApp.java

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyApp {
  public static void main(String[] args) {
      Logger logger = LoggerFactory.getLogger(MyApp.class);
      logger.info("こんにちは、世界!!");
  }
}

main()メソッドを実行し、コンソール出力を確認します:

2021-12-13 22:08:14 INFO  MyApp - こんにちは、世界!!

タグ: log4j2 SLF4J Java logging

6月16日 22:36 投稿