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 = 設定値
アペンダクラス名に以下のようなクラスを設定する。
アペンダークラス | 機能 |
---|---|
org.apache.log4j.ConsoleAppender | コンソールへログ出力 |
org.apache.log4j.FileAppender | ファイルへログ出力 |
org.apache.log4j.DailyRollingFileAppender | ファイルへログ出力する。日次ログローテ |
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は、アペンダーでの出力文字コード