menu
書いてる野郎
orebike@gmail.com
Log4Jはロガーという概念で設定にラベルを付けることができるようになっている。カテゴリとも言われる。 実際にはロガーはカテゴリを継承していて、どっちでもいいっぽい
この単位で出力するログレベルを調整する。
ロガーはそのラベルをドットで繋ぐことでツリー構造にすることができる。 とくに明示しなければ、親階層の設定を継承することになる。
でもこれは設定する側の理論。使う側は親階層を想定して使えばよい、設定に存在していない設定を記述しても その記述がツリー構造に準ずる(前方一致ということか?)ものだったらその設定が適用される。
つまり
jp.co.hoge.piyo
でロガーを作って設定したならば、使う側は・・・
jp.co.hoge.piyo.fuga
で使ったとして、jp.co.hoge.piyo.fugaの設定が存在しなくてもjp.co.hoge.piyoの設定でログが吐かれるということ
全部のカテゴリーに適用される特別な設定があってそいつは
rootLogger
という設定項目で設定できる。昔のバージョンだとrootCategoryと呼ばれてたっぽい
使う側はロガーのラベルを目印に使うことになる。 つまりどういう状況でいつ出力するかをロガー側の設定が担当するということだ。
Log4Jではロガーから独立して出力の設定を書くことができる。 状況と時間はロガーで決定するので出力は出力する場所、フォーマット等を指定する。
ロガーの設定と出力の設定に組み合わせる、ロガーに対して複数の出力設定を組み合わせることができる。 だからコンソールにも吐くしファイルにも吐くということができる。
Log4Jの設定は設定ファイルlog4j.propertiesに書く
{code} /var/log/hoge/piyo.log {/code} みたいな位置にログを吐きたいとする。そしてこれを日次でファイルを分けたいとすると・・・
まずロガーを用意する。
log4j.logger.jp.fuga=INFO, FG
loggerというキーワードに続き、ここではjp.fugaというロガーを用意して。出力するログレベルをINFOに設定。まだ作ってないが出力をFGというものにする。
出力の準備はできた。INFO以上のログがFGに出力されるということになった。逆にロガーjp.fugaを使ってDEBUGレベルのログを吐いてもFGには出力されない
漠然とFGに吐くということを書いたが、ここから具体的にどうするのかを設定する。
log4j.logger.jp.fuga=INFO, FG log4j.appender.FG=org.apache.log4j.DailyRollingFileAppender log4j.appender.FG.File=/var/log/hoge/piyo.log log4j.appender.FG.DatePattern='.'yyyy-MM-dd log4j.appender.FG.Append=true log4j.appender.FG.layout=org.apache.log4j.PatternLayout log4j.appender.FG.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} - %m%n
このように設定する。
開発中はファイルに出力せず、コンソールに吐いてお手軽に済ますということをよくやる
その場合は↓こうなる。今回は
log4j.rootLogger=DEBUG, C log4j.appender.C=org.apache.log4j.ConsoleAppender log4j.appender.C.Target=System.out log4j.appender.C.ImmediateFlush=true log4j.appender.C.layout=org.apache.log4j.PatternLayout log4j.appender.C.layout.ConversionPattern=%-5p %d [%t] %m%n
プロパティ | 説明 | 値 |
---|---|---|
logger | loggerの設定の起点、この後ろにドットで繋げてロガーに対するラベルをくっつける | log4j.logger.jp.piyo.hoge |
logger.jp.piyo.hoge | ロガー本体。値はそのロガーの出力方法によって変わる |