Log4jについて
Log4jとは?
Log4jはjava用のロギングAPIです。
って、例によってロギングとは何か?説明していきましょう。
System.out
Exceptionをcatchしたとき、どうしますか?
食べる?それはやめてくださいね。
1つの方法は、標準出力に出力することです。
}catch(Exception e){
System.out.println(e);
//e.printStackTrace();でもいいけど
}
あるいは、実行中のプログラムの変数の値を確認したいとき、どうしますか?
最も簡単なやり方は、やっぱりSystem.outですね。
String name = req.getParameter("name");
System.out.println("name=" + name);
でも、このやり方だといろいろと問題や物足りなさがあります。
例えば、こんなものです。
・出力のON/OFFが出来ない
・出力先が指定できない
Logクラス
運用に入るのにログの消し忘れがあると導入先からクレームが来ますよね。
また、運用時に(開発中でもいいけど)、何かしらトラブルがあった場合、
全くログを消していると、どこを調べていいのか、手のつけようがありません。
やはりログのオンオフは、設定で切り替えられる方が便利です、
お手軽にLog出力用のユーティリティクラスを作るとこんな感じでしょうか?
public class Log{
private static boolean LOG_ON = true;
public static void log(Object message){
if(LOG_ON){
System.out.println(message);
}
}
public static void log(Throwable error){
if(LOG_ON){
error.printStackTrace();
}
}
}
このLOG_ONフラグで、出力ON/OFFの切り替えが可能です。
出力先を切り替えるのも標準出力を変えれば可能です。
System.setOut(new PrintWriter("..."));
Log4j
でもって、ようやくLog4jですが、簡単に言うと先のLogクラスのすごいやつです。
お気楽Logクラスに比べ、何がすごいかって言うと、Log4jの概念を表す3つの言葉に象徴されます。
3つの言葉とはCategories, Appenders, Layoutsです。
Categories
出力範囲と出力レベルを設定できます。
例えば、DEBUGレベル以上で、com.muimi.hogeパッケージ以下のログだけ出そうということが可能です。
Appenders
出力先を指定できます。マニュアルを見ると、
コンソール, ファイル, GUI コンポーネント, リモートソケットサーバ, JMS, NT イベントログ, リモート・UNIX Syslog デーモン
ファイル、ソケット、メール、多種多様なものにおくれます。
う〜ん。いろいろありますね。
Layouts
出力情報とレイアウトをカスタマイズできます。例えば、
2000-09-07 14:07:41,508 [main] INFO MyApp - Entering application.
2000-09-07 14:07:41,529 [main] INFO MyApp - Exiting application.
こんなにしたり
INFO [main] (MyApp2.java:12) - Entering application.
DEBUG [main] (Bar.java:8) - Doing it again!
INFO [main] (MyApp2.java:15) - Exiting application.
こんなにしたり、いろいろできます。
上の3点に加え、
パフォーマンスについてもチューニングされている。
マルチスレッドでクライアントごとのログを取得する機能(ネスト化診断コンテキスト)の
機能もあるらしいです。
と、まあ速くて柔軟性のあるロギングAPI、それがLog4jです。
System.outの消し忘れに悩んでいるあなたは是非使いましょう。
自作Logクラスを使っているあなたも、一度触ってみてください。
使い方については、Ja-Jakarta-Log4jが詳しいので、そちらを参照してくださいませ。
余談ですが、
自分が欲しいと思うような機能というものは、たいてい、既に誰かが作ってるもんです。
北の国からのように、何事も自分の手でやってみたいという人もたまにいますが、
こんな機能が必要だと思ったら、いきなり作る前に探す方がよいでしょう。
それがオブジェクト指向の部品化、再利用ってもんです。
JDK1.4
と、Log4jについて簡単に書いたんですが、JDK1.4には、既にロギングAPIが標準装備されています。
java.util.loggingパッケージがそれで、ロギングについての機能が実装されています。
Log4jがいかに優秀であっても、一般的に使われる標準のロギングAPIは、時間が経つにつれ標準装備の方に移っていくと思います。
今のうちは、JDKのバージョンやらパフォーマンスやら必要な機能を検討して、よい方を使えばよいでしょうか。
(2002/7/10)
もどる