インストール

Log4jを理解する3つのキーワード

出力範囲と出力レベルを設定できます。

出力先を指定できます。マニュアルを見ると、

出力情報とレイアウトをカスタマイズ

設定ファイル

設定ファイルの場所を指定する

クラスパスの順番とか、クラスパスが通ってないとかそんなことに悩まされる必要がなくなるので指定するのがお勧め。初期化の段階で以下のコードを入れておく

PropertyConfigurator.configure(propertyFileName)
java -Dlog4j.configuration=file:///home/foo/log4j.properties 実行クラス

DEBUGレベルと、ERROR以上でログを分ける

バッチ処理でDEBUGログはコンソールに出す必要がないがシステムエラー系はコンソールに出しておきたいケースがあった。探しても探しても見つからなく、挫折しかけた頃にようやく見つけた。Thresholdパラメータがポイント

log4j.rootCategory=DEBUG,FILE,STDOUT
# 
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.Threshold=DEBUG
log4j.appender.FILE.File=debug.log
log4j.appender.FILE.Append=true
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d %c %m%n
# 
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.Threshold=INFO
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=%c %m%n

レイアウト

暗号みたいなレイアウトの記号を解説

記号解説表示例
%r経過時間をミリ秒で表示123
%pDEBUGやFATALなどの優先度DEBUG
%tスレッド名main
%cカテゴリー名
%mアプリケーションログメッセージこれを出力しなかったら意味ない
%n改行コード普通は文末に入れる
%C実際にログ出力されているクラス名。パフォーマンスが落ちるから運用時はNGtest.MyLogger
%M出力メソッド名。こちらもパフォーマンス低下somemethod
%F出力javaファイル名hoge.java
%L実行行数100

このままだと出力文字列の長さがまちまちになるのでフォーマットをかますのが一般的。最初からフォーマットをいれてしまうとまさに暗号なので、まずは上記レイアウト項目が出力されるのを確認してからフォーマットの設定を入れるのがよい。

Log4j 逆引き

出力するログレベルを制御したい

Thresholdを使う。

log4j.appender.STDOUT.Threshold=INFO

サンプルソース

etc

パフォーマンス

ファイルに書き込む時は同時書き込みでファイルを壊さないようにロック待ちが発生する。数百人が同時にアクセスするようなシステムではパフォーマンスに大きな影響が出る可能性があるのでログ設計は慎重にやる必要がある。なんでもdebug出力はよろしくない。

Counter: 15787, today: 1, yesterday: 1

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS