log4j備忘録とテンプレート

アプリのログはlog4jを使う場合が多いわけですが、それほど凝った事をしない限りは次のような感じです。

  • 開発時は標準出力
  • 保守・運用環境ではファイル出力

なので、テンプレートを作成しておけば便利ですね。
ここから適当に調節して使います。

# Root Logger: RESET
log4j.rootLogger=WARN,NULL
# Category
log4j.category.jp=DEBUG,STDOUT
log4j.category.org=INFO,STDOUT
#log4j.category.org.hibernate.transaction=DEBUG,STDOUT
#log4j.additivity.org.hibernate.transaction=false
# NULL Appender
log4j.appender.NULL = org.apache.log4j.varia.NullAppender
# STDOUT Appender
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.ImmediateFlush=true
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern= [%-5p] %c{1}#%M - %m%n
# DEBUG_LOG Appender (Daily Rolling)
log4j.appender.DEBUG_LOG = org.apache.log4j.DailyRollingFileAppender
log4j.appender.DEBUG_LOG.File = C:\\temp\\debug.log
log4j.appender.DEBUG_LOG.append = true
log4j.appender.DEBUG_LOG.layout = org.apache.log4j.PatternLayout
log4j.appender.DEBUG_LOG.layout.ConversionPattern = %d{HH:mm:ss} %t [%-5p] %c{1}#%M - %m%n
# INFO_LOG Appender (Daily Rolling)
log4j.appender.APP_LOG = org.apache.log4j.DailyRollingFileAppender
log4j.appender.APP_LOG.File = C:\\temp\\app.log
log4j.appender.APP_LOG.append = true
log4j.appender.APP_LOG.layout = org.apache.log4j.PatternLayout
log4j.appender.APP_LOG.layout.ConversionPattern = %d{HH:mm:ss} [%-5p] %m **** %c [%t]%n
log4j.appender.APP_LOG.Threshold=INFO

Appender

Appenderはログを出力する方法。標準出力とかファイル出力とか。

NullAppender

何も出力しないAppender。ルートロガーに設定しておくと余計なログがでないので便利。

log4j.appender.NULL=org.apache.log4j.varia.NullAppender

ConsoleAppender

標準出力(標準エラー出力)にログを出力するAppender。

# STDOUT Appender
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.ImmediateFlush=true
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern= [%-5p] %c{1}#%M - %m%n

TargetのデフォルトはSystem.out、System.errを指定すると標準エラー出力

DailyRollingFileAppender

日毎にローテーションするファイルにログを出力するAppender。

log4j.appender.DEBUG_LOG = org.apache.log4j.DailyRollingFileAppender
log4j.appender.DEBUG_LOG.File = C:\\temp\\debug.log
log4j.appender.DEBUG_LOG.append = true
log4j.appender.DEBUG_LOG.layout = org.apache.log4j.PatternLayout
log4j.appender.DEBUG_LOG.layout.ConversionPattern = %d{HH:mm:ss} %t [%-5p] %c{1}#%M - %m%n

Logger

Category(通常はパッケージ)毎のLogレベルとAppenderの組み合わせ。

  • 書式は、[ログレベル],[アペンダー1],[アペンダー2],…。アペンダーは1個以上、ログレベルは必須。
  • Categoryを指定してLogレベルとAppenderを指定する
  • LogレベルとAppenderは指定したCategoryのサブCategoryへも継承される
  • 指定したCategoryの親CategoryでLoggerが設定されている場合、Logレベルは上書き、Appenderは追加。
  • Appenderは同一Appenderでも重複して追加される
  • 追加したくない場合はadditivityを使う
rootLogger

すべてのCategoryの親となるLogger。
デフォルト設定となる為、各種ライブラリのLoggingまで影響を与えるため、NullAppenderを設定しておくと楽。

log4j.rootLogger=INFO,NULL

log4j.logger.xxx.xxx

loggerの後にパッケージを指定する。
原則として、指定したパッケージ以下のサブパッケージ全てにそのアペンダーが適用される。
同じアペンダーをサブパッケージに指定すると、ログの重複現象に見舞われる(additivityで回避)。

Layout

よく使うレイアウト。デイリーログを使う場合は、ぶっちゃけ日付はいらないと思う。

%d 時刻
%c カテゴリ
%m メッセージ
%n 改行
%p ログレベル
%t スレッド名
%C クラス名※
%M メソッド名※

※負荷が高いので注意

# 標準出力用簡易パターン(開発環境向け)
[%-5p] %c{1}#%M - %m%n
# 詳細パターン(インテグレーション環境向け)
%d{HH:mm:ss} %t [%-5p] %c{1}#%M - %m%n
# 運用パターン(運用環境向け)
%d{HH:mm:ss} [%-5p] %m - %c [%t]%n