comscom@Wiki
ログの内容をかっこよく作る(Layout)
最終更新:
dotcom
-
view
外部ログに出力もできるようになったので、じゃあ次行っちゃいましょうか。です。
ログの形をフォーマットです。
いまのままじゃただのメッセージです。
よりログっぽくです。
いまのままじゃただのメッセージです。
よりログっぽくです。
やっちゃいます。
org.apache.log4j.PatternLayout
これだな、これ!
って、これって前に使ってたような。。。
コピペの怖いワナ。。。
って、これって前に使ってたような。。。
コピペの怖いワナ。。。
こんなふうに生成して
PatternLayout layout = new PatternLayout();
でAppenderで使ってる。
appender = new WriterAppender(layout,writer);
じゃこのlayoutに何か設定してあげたらいいんじゃ?なんて安直に思ったり。
いやいや、newするときじゃない?
いやいや、newするときじゃない?
PatternLayoutに好き勝手に設定してみる。
PatternLayout layout = new PatternLayout();
を
PatternLayout layout =
new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN);
ってしてみたの。
TTCC_CONVERSION_PATTERN
っていうのは
%r [%t] %p %c %x - %m%n
ってパターンのこと。
最初は自分で指定しないであらかじめ用意してくれてるの使ってみようと思って。
というわけで
TTCC_CONVERSION_PATTERNで出力してみる。
こんな感じで作ってみたです。前と違うところはPatternLayoutのnewでパターンを設定してるってことだけ。
public static void main(String argv[]) {
PatternLayout layout =
new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN);
// 出力ファイル名
String file = "sample.log";
// java.io.Writerオブジェクト
// org.apache.log4j.WriterAppenderオブジェクト
Writer writer = null;
WriterAppender appender = null;
try{
writer = new FileWriter(file,true);
appender = new WriterAppender(layout,writer);
}catch(IOException e){
}
Logger logger = Logger.getLogger("Sample");
logger.addAppender(appender);
logger.info("This is info.");
System.out.println("おわったよん");
}
よし。
実行結果!
0 [main] INFO Sample - This is info.
って出たわ。
きゃーなんだかすてきー。
きゃーなんだかすてきー。
中身について考えるわ。
さっきの%mとか%nとかってやつが上みたいになるわけね。
さっきの%mとか%nとかってやつが上みたいになるわけね。
%r [%t] %p %c %x - %m%n
%rってのが
アプリケーションが開始してから、ログが出力されるまでの時間をミリ秒単位で出力する。
0ってことはすぐかい!
%tってのが
ログを生成したスレッドの名前を出力する。
"["と"]"でかこってあるわ。これはこの形でそのまんま出力されてるー。
main。そうかメインしかないもんね。ってこれであってる?
main。そうかメインしかないもんね。ってこれであってる?
%pってのが
ログの優先度を出力します。
%cってのが
ログイベントのカテゴリー名を出力する。
%xってのが
ログが生成されたスレッドのNDC(ネスト化診断コンテキスト) を出力する。
せんせい!よくわかりません!てか出力されてないし。
%mってのが
ロギングイベントで設定されたメッセージを出力する。
私がお願いしたとおりにでています。てかコピペしたんだけど。
%nってのが
プラットフォーム依存の改行文字を出力する。
次のログは改行後にでてくれるってわけね。
うーん。
これでもいい感じはするんだけど、日時とかほしいかも。
自分で作ってみましょうそうしましょう。
これでもいい感じはするんだけど、日時とかほしいかも。
自分で作ってみましょうそうしましょう。
というわけでやってみた。
好きな形で出力してみる。
まずはちょっと簡単な形で。
上の項の
new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN);
を
String LogPattern = "%p : %d{yyyy/MM/dd hh:mm:ss} : %c : %C : %n";
PatternLayout layout = new PatternLayout(LogPattern);
にしてみたら。
実行結果!
INFO : 2007/03/28 02:08:32 : Sample : Log4Jtest.test.dotcom.Log4jTest :
なんてでてきましたよ!
%Cは実行した時のクラス名???
じゃ%Cは別のクラスで実行したら変わるのかな?
じゃ%Cは別のクラスで実行したら変わるのかな?
さて次はこれをいろんなところで使ってみたいのです。
組み込んでみたいのです。
組み込んでみたいのです。
設定ファイルを使うやり方ってのも知りたいし。
まだまだお勉強します。