2020年8月28日星期五

Log4J Configration.

log4jのデフォルトのプロパティ

Log4j.properties Of Default Mode Include.
#Application Root Logger. Include The Range Of All Modules. 
log4j.rootLogger=ERROR,stdout

#The Range Of This Application. Namespace=com.mygroup
log4j.logger.com.mygroup=INFO
#The Range Of Sub Web System Of this Application.
log4j.logger.com.mygroup.web.metrics=INFO

#Log will be out to Console, with PatternLayout, without File.log
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p\t%d{ISO8601}\t%r\t%c\t[%t]\t%m%n
Log4j.properties Of FileAppender with PatternLayout.
# initialize root logger with level ERROR for stdout and fout
log4j.rootLogger=ERROR,stdout,fout
# set the log level for these components
log4j.logger.com.mygroup=INFO
log4j.logger.com.mygroup.web.metrics=INFO
# add a ConsoleAppender to the logger stdout to write to the console log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout # use a simple message format log4j.appender.stdout.layout.ConversionPattern=%m%n # add a FileAppender to the logger fout log4j.appender.fout=org.apache.log4j.FileAppender # create a log file log4j.appender.fout.File=ThisApplication.log log4j.appender.fout.layout=org.apache.log4j.PatternLayout # use a more detailed message pattern log4j.appender.fout.layout.ConversionPattern=%p\t%d{ISO8601}\t%r\t%c\t[%t]\t%m%n

 org.apache.log4j.PatternLayout

さて、これが真打ち。勝手に自分でレイアウトを決めてやることができる、とっても重要なレイアウトである。一番よく使うと言っても過言ではない。printf の編集フォーマットとか、Apache の CustomLog ディレクティブみたいに、「%t」とかの % で始まる1文字で、いろいろな要素をシンボル化して指定する。そういうエスケープ文字のリストはこうだ。

%cカテゴリー名。これは %c{1} という風に書けて、%c{1} だと一番「下の」
レベル、jp.or.nurs.sug.log4j.test.child.TestChild なら、「TestChild」のみになる。
%Cログを生成したクラス名(≠カテゴリー名)。これも %C{2} という風に書けて、
%C{2} だと一番「下の」レベルから2つ上にたどる。
jp.or.nurs.sug.log4j.test.child.TestChild クラスなら、「child.TestChild」になるわけだ。
%d日付。これは %d{yyyy-MMM-dd HH:mm:ss,SSS} みたいに細かく書けるし、
また、TTCCLayout で使ったシンボルを使って、 %d{ISO8601}
みたいに書いても良い。
%l以下3つはいわゆる「LocationInfo」と呼ばれる、「ソース上どこでログイベントが発生したか?」についてのレイアウト指定である。これらの情報は有益だが、通信系Appenderの場合は「いらない情報をわざわざネット越しに送る」ことになるとか、スタックフレームを参照するのでJVMによってはうまく動かないケースがないわけではないとか、そもそもスピードが遅いとか、いろいろと問題を抱えているログ要素である。だから、これらは独立して「出す/出さない」の設定が可能なことが多い。で、この「%l」は3つの「LocationInfo」をまとめて出すオプション指定である。たとえば、「jp.or.nurs.sug.log4j.test.TestLog4j.main(TestLog4j.java:18)」のような出力になる。
%Fログを生成したソースファイル名。遅いぞ!と警告されている
%Lログを生成した箇所のソースの行番号。遅いぞ!と警告されている
%Mログを生成したメソッドの名前。遅いぞ!と警告されている
%mログメッセージ
%xNDC の値
%X{key}その MDC(1.2)、プロパティ(1.3) に保存された key の値
%n改行コードを生成する。\nじゃないわけである。
%pログレベル(FATALとかINFOとか)
%rアプリケーションが開始してからの通算時間(ミリ秒)
%tログを生成したスレッド名
%throwable{short}1.3で追加。これはレイアウト要素というよりも一種のスイッチである。例外をログメソッドに渡して Log4j を呼ぶと、デフォルトでは例外スタックトレースをすべて出力することになる。とはいえ、これは鬱陶しいケースも多い。なので、この「%throwable{short}」という表現をログフォーマットの末尾につけてやると、例外スタックトレースの最初の行だけを表示することになる。ちょっと動作が例外的なのが気になるが...
%properties{プロパティ名}1.3で追加。ログイベントのプロパティ。使いかたは後述する。

没有评论: