fc2ブログ
ホーム   »  Java  »  Tomcat 6.0 の標準ログを Log4j に変更

Tomcat 6.0 の標準ログを Log4j に変更

はるか昔、Tomcat 3.x の時代からインストール直後の Tomcat (Catalina) のログは ${CATALINA_HOME}/logs/catalina.out に出力されてきた。このファイルは標準出力の代わりなのだが、日付やサイズで自動的にローリングしないどころか Tomcat 起動中はずっとオープンされっぱなしであるため管理上いささか都合が悪い。

catalina.out に出力される大半は Catalina が標準 Logging API (java.util.logging.*) を使用して出力したログである。この定義は ${CATALINA_HOME}/conf/logging.properties で変更できるため、単純に catalina.out にほとんど何も出力されないようにすることが目的なのであればこれを編集すればよい。話は終わり。

今回は Catalina/Tomcat のログを標準 Logging API ではなく Log4J 経由で出すよう構成してみる。

Tomcat のログ出力をあえて Log4J で行おうという動機は、

  • よりパフォーマンスの高いコンポーネントを選択したい。
  • 標準装備の Appender が豊富。
  • ログファイルをあまり分散させたくない。開発物の出力とひとまとめにしたい。

などが考えられるが、往々にして開発で Log4J を使用しているのでそれに合わせたいというのが根本の理由なのではないだろうか。幸いにして Catalina/Tomcat は Commons Logging API というログ出力 Wrapper のような API を使用しているため Log4J とすり替えが可能な構成になっている。今回はそれを利用して Log4J に置き換えてしまおうという計画。

最後に Tomcat 6.0 用に作ったビルド済みの JAR を置いておくので、それだけ必要な人は途中をすっ飛ばしてもらってかまわない。

ビルド

バイナリ配布版の Tomcat 6.0 では標準 Logging API だけを使用する必要最小限のモジュール構成になっているため、一度ソース版をダウンロードして再ビルドし、ログ関係のモジュールを置き換える必要がある。ビルドに必要なものは以下の通り。

  1. Tomcat 6.0.x のソース配布版
  2. Ant 1.6 または 1.7
  3. Java2 SE 5.0 (or later とあるが、一部メソッドの追加されたインターフェースをコンパイルできないため 6 では NG)

以下、ビルド手順。現時点でダウンロードファイルのリンク切れや必須ディレクトリがないなどの問題があるため、トラブルの対処には Java+Ant の知識がないとつらいかもしれない。

  1. Tomcat 6.0 のソースアーカイブを適当なディレクトリに解凍する (以下 ${TOMCAT_SRC} とする)。
  2. コンソールやコマンドプロンプトを開いて ${TOMCAT_SRC} に移動。
  3. ant download コマンドでコンパイルに必要なファイルを全てダウンロードする。 ダウンロードファイルがリンク切れでエラーが発生する場合は、ミラーサイトなどに残っている該当ファイルを探し出して build.properties.default を修正する必要がある (私の場合 eclipse-JDT-3.2.2.zip がリンク切れだったので http://mirror.calvin.edu/eclipse/downloads/drops/R-3.2.2-200702121330/eclipse-JDT-3.2.2.zip へ変更した)。
  4. 全ファイルダウンロードが完了したら ant コマンドでフルビルドを行う。途中 「output/classesディレクトリが無い」 というようなエラーが出たら該当ディレクトリを作成して再実行する。
  5. フルビルドが完了した時点でバイナリ配布版相当のモジュールが出来上がった状態である。これに Log4J 追加機能を加えるためにもう一手間 ant -f extras.xmlを実行する。

ビルドはこれで完了。

配布と設定

次に配布であるが、${TOMCAT_SRC}/output/extras/tomcat-juli.jar${CATALINA_HOME}/bin へ (既に存在するので上書きする)、${TOMCAT_SRC}/output/extras/tomcat-juli-adapters.jar${CATALINA_HOME}/lib へコピーするだけで完了である。

また Catalina 起動時から Log4J を利用できる状態にしておかなければならないため Log4j のライブラリを Catalina から参照できる場所、例えば ${CATALINA_HOME}/lib の下に保存する (Web アプリケーションごとの /WEB-INF/lib は×)。同様に Log4j 設定もクラスパスの通ったディレクトリの log4j.propertiesを置いたり、Java VM の起動オプションに -Dlog4j.configuration=file:///etc/tomcat6/conf/log4j.xmlなどを追加する必要がある。

まぁ個別にビルドしなくても Tomcat 6.x の間は互換性があると思われますのでビルド済みの JAR ファイルを置いておきます。ダウンロードの空き時間にはこのページの…、えー、規約上はっきりとは申し上げられませんが、何か興味のあるサイトへのリンクなどがあれば、えー、20 人くらいポチッとして頂ければ缶コーヒー 1 本くらい飲めるのかな? (笑)

  1. tomcat-6.0.14_log4j.zip
コメント
トラックバック
これで、かなり快適なロギング環境を構築することができました。すごい便利。 事の始...
トラックバック URL
コメントの投稿
管理者にだけ表示を許可する
Profile
Takami Torao
Takami Torao
C/C++ 使いだった 1996年、運命の Java と出会い現在に至る。のらアーキテクト。
Yah, this is image so I don't wanna eat spam, sorry!
Search

Google
MOYO Laboratory
Web

カテゴリー
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
ブロとも申請フォーム
RSSフィード
リンク