commons-loggingと合わせて使うlog4jの設定方法がわかっていなかったので、まとめてみます。
1. 設定概要
設定ファイル:log4j.properties
配置場所:クラスパスの通ったパス。resourcesなど
log4j.xmlへの設定もできるが、今回はプロパティファイルに設定する前提記載していきます。
設定 |
説明 |
appender |
ログの出力先、出力方法の設定。Console、File出力が可能で、複数の出力先へ出力可能 |
layout |
ログ出力形式の指定。日付、ログレベル、ログ出力先のクラス名などをappender毎の設定 |
category |
categoryは、ログ設定単位。パッケージまたは、クラス単位で出力レベルの設定が可能 |
2. 基本的な設定方法
一般的な設定方法は、以下の通り
# カテゴリ
log4j.rootCategory = INFO, A1
log4j.category.org.aaa.myApp = DEBUG, A1
# アペンダー
log4j.appender.A1 = org.apache.log4j.ConsoleAppender
log4j.appender.A1.Target = System.out
# レイアウト
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern = %d{HH:mm:ss,SSS} %-5p %c - %m%n
カテゴリ
log4j.rootCategory= ログレベル,アペンダ名1,アペンダ名2,・・・
log4j.category.カテゴリ名 = ログレベル,アペンダ名1,アペンダ名2,・・・
rootCategoryが親の設定。categoryの設定が、子設定で親の設定を継承します。
カテゴリ名の箇所に、パッケージ名やクラス名を指定。
アペンダー
log4j.appender.アペンダ名 = アペンダクラス名
log4j.appender.アペンダ名.プロパティ名1 = 設定値
log4j.appender.アペンダ名.プロパティ名2 = 設定値
アペンダクラス名に以下のようなクラスを設定する。
log4j.appender.A1.Target
で出力内容を指定。
指定は、標準出力(System.out)or 標準エラー出力(System.err)
レイアウト
log4j.appender.アペンダ名.layout = レイアウトクラス名
log4j.appender.アペンダ名.layout.ConversionPattern = レイアウトパターン
レイアウトクラス名で、org.apache.log4j.PatternLayout
を指定することでユーザがレイアウト指定可能になります。
指定は、レイアウトパターンの箇所に設定。
3. 階層構造とログ伝播
一般的な設定例の内容を再度記載します。
# カテゴリ
log4j.rootCategory = INFO, A1
log4j.category.org.aaa.myApp = DEBUG, A1
# アペンダー
log4j.appender.A1 = org.apache.log4j.ConsoleAppender
log4j.appender.A1.Target = System.out
# レイアウト
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern = %d{HH:mm:ss,SSS} %-5p %c - %m%n
rootCategoryが親、categoryがその子という階層ですが、
ロガーでは、子のアペンダーで設定したログ出力条件は、伝播するという仕組みを持っています。
そのため、アペンダーA1で設定した標準出力内容をコンソールに出力するという設定は、
org.aaa.myAppより上の階層でも適用されます。
これを回避したい場合は、以下の設定を追加します。
# カテゴリ
log4j.rootCategory = INFO, A1
log4j.category.org.aaa.myApp = DEBUG, A1
log4j.additivity.org.aaa.myApp = false # ← 追加
・
・
こうすると上の階層にA1アペンダーのログ設定は反映されません。
もちろん、上位で設定しているアペンダーがあればその設定は、有効です。
4. 押さえておきたい設定
設定可能な便利なオプションは多数ありますが、2つだけ共有しておきます。
log4j.appender.名前=org.apache.log4j.SomeAppender
log4j.appender.名前.Threshold=INFO
log4j.appender.名前.encoding=UTF-8
Thresholdは、アペンダー単位のログレベルの指定。
標準出力はINFO、ファイル出力は、ERRORレベルまでを出力可能とするなどの設定が可能となる。
encodingは、アペンダーでの出力文字コード