articles:log4j2

Log4j2

すごく簡単にまとめると、下の順番で検索して最初に見つかったものを使用する。

  1. システムプロパティで指定されたファイル: VMの引数で-Dlog4j2.configurationFile=/path/to/log4j2.xml (2.10より前のバージョンではlog4j.configurationFile)
  2. クラスパス上のlog4j2-test.xml
  3. クラスパス上のlog4j2.xml

システムプロパティの代わりに環境変数LOG4J_CONFIGURATION_FILEで指定できたり、 設定ファイルをxml以外で書けたりするが、おおざっぱにまとめると上の法則。

<Configuration monitorInterval="30">
...
</Configuration>

ルート要素Configurationの属性monitorIntervalで設定。 値は設定ファイルの変更をチェックする周期で、最小値は5(秒)。 値に0を設定すると動的反映が無効になる。

下記のように指定すると、com.example以下はwarncom.foobar以下はdebug、それ以外はinfoレベルで出力。

  <Loggers>
    <Logger name="com.example" level="warn" />
    <Logger name="com.foobar" level="debug" />
    <Root level="info">
      <AppenderRef ref="FILE" />
    </Root>
  </Loggers>

最低限の設定をしたフォールバック用をjarに巻き込む。

log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="APP">
  <Appenders>
    <Console name="CONSOLE" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{ABSOLUTE} [%t] %-5level %c{1} - %m%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="CONSOLE"/>
    </Root>
  </Loggers>
</Configuration>

本番環境用の設定はシステムプロパティで指定する。

log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration name="APP" status="warn">
  <Appenders>
    <RollingFile name="FILE" filePattern="log/APP_%d{yyyy-MM-dd}.log">
      <PatternLayout pattern="%d (%r) [%pid][%t] %-5level %c{1.} - %m%n" />
      <TimeBasedTriggeringPolicy />
      <DirectWriteRolloverStrategy maxFiles="10" />
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="FILE" />
    </Root>
  </Loggers>
</Configuration>
  • 最終更新: 2020-03-07 14:30
  • by nabium