火. 4月 22nd, 2025

log4j2.xmlの基本的な仕組み

Log4j2は、Javaのログ出力ライブラリであり、その設定は通常、XML形式の設定ファイルで行われます。この設定ファイルは通常 log4j2.xml という名前で、クラスパスのルートに配置されます。

ルートロガー

log4j2.xml の中心的な要素は <Loggers> タグです。このタグの中には、一つの <Root> タグと、任意の数の <Logger> タグが含まれます。<Root> タグは、アプリケーション全体で使用されるデフォルトのロガーを定義します。

<Loggers>
    <Root level="error">
        <AppenderRef ref="Console"/>
    </Root>
</Loggers>

上記の設定では、ルートロガーのログレベルを error に設定し、Console という名前のアペンダー(ログ出力先)を参照しています。

ロガー

<Logger> タグは、特定のパッケージやクラスに対するロガーを定義します。これにより、特定の部分のログ出力レベルを細かく制御することができます。

<Loggers>
    <Logger name="com.example" level="debug">
        <AppenderRef ref="File"/>
    </Logger>
    <Root level="error">
        <AppenderRef ref="Console"/>
    </Root>
</Loggers>

上記の設定では、com.example パッケージのログレベルを debug に設定し、File という名前のアペンダーを参照しています。これにより、com.example パッケージのログはファイルに出力され、その他のログはコンソールに出力されます。

以上が、log4j2.xml の基本的な仕組みです。次のセクションでは、設定ファイルの読み込み順序と方法について説明します。

設定ファイルの読み込み順序と方法

Log4j2は、設定ファイルを読み込む際に特定の順序を持っています。この順序は以下の通りです:

  1. システムプロパティ log4j.configurationFile で指定された設定ファイル
  2. クラスパス上の log4j2-test.properties
  3. クラスパス上の log4j2-test.yaml または log4j2-test.yml
  4. クラスパス上の log4j2-test.json または log4j2-test.jsn
  5. クラスパス上の log4j2-test.xml
  6. クラスパス上の log4j2.properties
  7. クラスパス上の log4j2.yaml または log4j2.yml
  8. クラスパス上の log4j2.json または log4j2.jsn
  9. クラスパス上の log4j2.xml

この順序により、テスト環境と本番環境で異なる設定を使うことが可能になります。例えば、テスト環境では log4j2-test.properties を、本番環境では log4j2.properties を使用するといった具体的な使い分けが可能です。

設定ファイルの読み込みは、アプリケーションの起動時に一度だけ行われます。しかし、<Configuration monitorInterval="60"> のように設定することで、設定ファイルの変更を定期的に監視し、変更があった場合に設定をリロードすることが可能です。この例では、60秒ごとに設定ファイルの変更を監視します。

以上が、log4j2.xml の読み込み順序と方法についての説明です。次のセクションでは、設定ファイルのカスタマイズについて説明します。

設定ファイルのカスタマイズ

Log4j2の設定ファイルは、アプリケーションのログ出力を細かく制御するための強力なツールです。以下に、設定ファイルのカスタマイズの一例を示します。

アペンダーのカスタマイズ

アペンダーはログメッセージの出力先を定義します。以下に、ファイルへの出力を行うアペンダーの設定例を示します。

<Appenders>
    <File name="File" fileName="logs/app.log">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>
</Appenders>

この設定では、logs/app.log というファイルにログを出力します。ログメッセージのフォーマットは PatternLayout タグで定義され、ここでは日時、スレッド名、ログレベル、ロガー名、メッセージを出力するように設定しています。

フィルタのカスタマイズ

フィルタは、特定の条件を満たすログメッセージだけを出力するためのものです。以下に、特定のログレベル以上のメッセージだけを出力するフィルタの設定例を示します。

<Logger name="com.example" level="info">
    <Filter type="ThresholdFilter" level="error"/>
    <AppenderRef ref="File"/>
</Logger>

この設定では、com.example パッケージのログレベルを info に設定していますが、ThresholdFilter により error レベル以上のメッセージだけが出力されます。

以上が、log4j2.xml のカスタマイズについての説明です。次のセクションでは、AppenderとLoggerの設定について説明します。

AppenderとLoggerの設定

Log4j2では、ログの出力先(Appender)とログの生成元(Logger)を設定ファイルで管理します。以下に、それぞれの設定方法を説明します。

Appenderの設定

Appenderはログの出力先を定義します。以下に、コンソールとファイルへの出力を行うAppenderの設定例を示します。

<Appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
    <File name="File" fileName="logs/app.log">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>
</Appenders>

この設定では、Console Appenderは標準出力に、File Appenderはlogs/app.logというファイルにログを出力します。ログメッセージのフォーマットはPatternLayoutタグで定義されています。

Loggerの設定

Loggerはログの生成元を定義します。以下に、特定のパッケージに対するLoggerの設定例を示します。

<Loggers>
    <Logger name="com.example" level="info" additivity="false">
        <AppenderRef ref="File"/>
    </Logger>
    <Root level="error">
        <AppenderRef ref="Console"/>
    </Root>
</Loggers>

この設定では、com.exampleパッケージのログレベルをinfoに設定し、File Appenderを参照しています。additivity="false"は、このLoggerが親Loggerから継承したAppenderを使用しないことを意味します。そのため、com.exampleパッケージのログはファイルにのみ出力され、その他のログはコンソールに出力されます。

以上が、AppenderとLoggerの設定についての説明です。次のセクションでは、レイアウトの指定について説明します。

レイアウトの指定

Log4j2では、ログメッセージのフォーマットをレイアウトとして定義します。以下に、PatternLayoutを使用したレイアウトの設定例を示します。

<Appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
</Appenders>

この設定では、ログメッセージのフォーマットをPatternLayoutタグで定義しています。パターン文字列"%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"は、ログメッセージの各部分をどのように表示するかを指定します。

  • %d{HH:mm:ss.SSS}: 日付と時刻。HH:mm:ss.SSSの形式で表示します。
  • [%t]: スレッド名。[]で囲まれて表示します。
  • %-5level: ログレベル。5文字分の幅を確保して左寄せで表示します。
  • %logger{36}: ロガー名。最大36文字分を表示します。
  • %msg: ログメッセージ。
  • %n: 改行。

以上が、レイアウトの指定についての説明です。次のセクションでは、子Loggerの使用について説明します。

子Loggerの使用

Log4j2では、Loggerの階層構造を利用することができます。これにより、特定のパッケージやクラスに対するログ出力設定を、より細かく制御することが可能になります。

以下に、子Loggerの設定例を示します。

<Loggers>
    <Logger name="com.example" level="info">
        <AppenderRef ref="File"/>
    </Logger>
    <Logger name="com.example.sub" level="debug">
        <AppenderRef ref="Console"/>
    </Logger>
    <Root level="error">
        <AppenderRef ref="Console"/>
    </Root>
</Loggers>

この設定では、com.exampleパッケージのログレベルをinfoに設定し、File Appenderを参照しています。また、その子パッケージであるcom.example.subのログレベルをdebugに設定し、Console Appenderを参照しています。

このように、子Loggerを使用することで、特定のパッケージやクラスに対するログ出力設定を親Loggerから独立させることができます。これにより、ログ出力の粒度を細かく制御することが可能になります。

以上が、子Loggerの使用についての説明です。次のセクションでは、具体的な使用例とその効果について説明します。

By jakoten

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です