#author("2019-08-08T12:19:06+00:00","default:wikiadmin","wikiadmin")
-JDK標準のロギングよりはるかに使われているライブラリ

#contents

*インストール [#m6ad796d]

*Log4jを理解する3つのキーワード [#j2dec6ad]

-Categories

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

-Appenders

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

-Layouts

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

*設定ファイル [#a1a9e8bf]

**設定ファイルの場所を指定する [#q3cb74a1]

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

 PropertyConfigurator.configure(propertyFileName)

-起動オプションで設定するやり方もある

 java -Dlog4j.configuration=file:///home/foo/log4j.properties 実行クラス

**DEBUGレベルと、ERROR以上でログを分ける [#z5a23236]

バッチ処理で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


**レイアウト [#h8b03188]

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

|記号|解説|表示例|
|%r|経過時間をミリ秒で表示|123|
|%p|DEBUGやFATALなどの優先度|DEBUG|
|%t|スレッド名|main|
|%c|カテゴリー名||
|%m|アプリケーションログメッセージ|これを出力しなかったら意味ない|
|%n|改行コード|普通は文末に入れる|

-以下は呼び出しクラスなど詳細な情報でデバッグには役立つがパフォーマンスとトレードオフなので本番運用時ははずすこと。

|%C|実際にログ出力されているクラス名。パフォーマンスが落ちるから運用時はNG|test.MyLogger|
|%M|出力メソッド名。こちらもパフォーマンス低下|somemethod|
|%F|出力javaファイル名|hoge.java|
|%L|実行行数|100|

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

*Log4j 逆引き [#sece88a0]

**出力するログレベルを制御したい [#ae36bf89]

Thresholdを使う。

-INFO以上出力

 log4j.appender.STDOUT.Threshold=INFO

*サンプルソース [#cbbdcc1f]

*etc [#y6e236ac]

**パフォーマンス [#h3e23df8]

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

#counter

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS