Log4J徹底解説

目次

  1. 概説
  2. 使い方(1)
  3. 使い方(2)
  4. 基本のAppender
  5. ファイル保存系Appender
  6. ネットワーク系Appender
  7. JMSAppender
  8. OSログ系Appender
  9. JDBCAppender
  10. その他のAppender
  11. 1.3で追加されたAppender
  12. フィルタ機能
  13. Joran Hacks(1.3)
  14. 自前 Appender の書き方!(1.3)
  15. Chainsaw(1.3)
  16. アスペクトはお好き?
  17. Log4cxxと小物ツール
  18. Log4php の使い方
  19. Log4php の Appender たち

もともとこの文書はバージョン 1.2.8 をベースに書いたものだが、2006年中に 1.3 がリリースされる、とアナウンスされていることもあり、フライングか?と思わなくもないが、1.3 対応をしました! あと、どうも要望のありげな log4php についての記述を大追加!

2007.9.15。結局、記述日現在で状況はこうなっている。大普及バージョンだった 2003/02/19 の日付のある 1.2.8 の後、無意味にリビジョンだけ増えていく...という状況が3年強続いた後に、1.2系の開発継続というかたちになって、2006年9月にいろいろとバグ対応したり、要望の多い Appender オプションが増えた 1.2.14 がリリースされ、2007年8月には同様に 1.2.15 がリリースされている。この開発一時ストップのウラには、それまでのメイン開発者であり、生みの親である Ceki Gülcü が提唱した 1.3 に向けてのいろいろな仕様が、「それまでのバージョンと互換性が取れない...」という理由で却下されて、Gülcüが Log4j についてヤル気をなくし、新たに自身のプロジェクトとして、Logback を始めちゃった...ということにある。だから、このページでいろいろ解説した 1.3 仕様は、今のところ公式に Apache の Log4j プロジェクトで採用される見込みはないものである(部分的に採り入れているものがないわけでもないが...)。いろいろややこしいな.....というわけで、筆者も腹を決めて、1.2系開発のその後の仕様追加と、Logback の解説とに、整理し直そうと思う。かなり修正量も多いので、徐々に手を付けていくが、とりあえず 1.2.14以降の追加仕様に関してはいろいろ書いたので、アップする。

1.2.14以降での大きな追加仕様はこんな感じだ。

  1. SMTPAppender の大幅な機能追加。これには Cc, Bcc オプションの追加とか、認証付SMPTとか、使えるオプションも多いし、いくつかバグも直っている。ただし、日本語対応はいまだにあまり良くない。
  2. SyslogAppender の機能追加。実質レイアウト不要になるような新しい設定法が導入された。
  3. AsyncAppender のバグ修正と新オプション。イベント保留バッファが満杯になった時の動作に問題があったので、その修正。内部的にはかなり変わっているが、表面的には Blocking オプションが追加されただけである。
  4. SocketAppender の新オプション。Applicationオプションが追加された。
  5. LoggingEvent に、MDC に依存しない setProperty() が追加された。少し解説

計画どおりうまく運ぶわけがない....が、ボヤキはここまで。


最近、Log4J を使ったロギングって増えている。まあ、Struts がブームで、Struts の(実質上の)デフォルトログツールが Log4J なもんだから、広く使われるようになっているんだけど、これっていろいろ出来て面白い。しかし、フツーに使っている分には、RollingFileAppender でローテートするログファイルを作るのがせいぜいで、あまり凝ったことまで解説されていないことが多いわけだが、実は筆者はとある理由で Log4J をハックしたので、「Log4J の面白い使い方」という見地で解説を書いてみよう。

「とある理由」というのは、実は JAVAPRESS(技術評論社)から執筆依頼が舞い込んで、「ここまでできる Web アプリケーションセキュリティ対策!」という総タイトルのもとに、筆者は「第6章:侵されたときの分析と対策」を担当することになった。で、「JAVAPRESS」だ。何が Java ネタを考えなくっちゃ...ということで思いついたのが「Log4J の面白い使い方」なのだが、実はその前の号(9月発売)で Log4J を取り上げることになっていたために、ボツにしてしまった。しかし、面白いし結構ハックもしたので、もったいない...という理由でホームページ上でやることにした。

というわけである。ぜひぜひ「JAVAPRESS」もごヒイキにしてやって頂きたいし、11月号も買ってくれたまえ。さすがにちょっと執筆内容をホームページにアップするのは、発売の後にしようと思うが、これはボツ内容なので構わないな。

そういえば JAVAPRESS はお亡くなりになった...ご冥福をお祈りいたします。

実際、Log4J はオモシロイぞ。フツーはプログラマの担当はログを吐き出すところまでなのだが、Log4J は吐き出したログをいろいろな手段で「送る」ことができる。しかもそれは設定ファイルによって事後的に変更できたりするのである! ここらへんがメチャ面白いところなので、きっと「へぇ〜〜」と思うことが、使ったことのある人にもあるに違いない。あと、Log4J の C++ 版として、Log4cxx があるが、これも基本的に Log4J と同じだ。パフォーマンス面で問題が生じるケースでは、ネイティブコードで動き、「スレッドがどうこう」と考える必要のない Log4cxx を使う方が適切な場合もあるので、これについても解説しちゃおう。

基本的に内容は筆者のハックによる情報である。Deep なものとか、バグ回避とかもあったりするので、そこらの解説よりもずっと面白いことを保証するぞ。

!!NEW!! サンプルの配布パッケージを作った。パブリックドメインで結構なので、遊んで活用してくれ。解説などは以下だ。

詳細目次



copyright by K.Sugiura, 1996-2006