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 だけを使用する必要最小限のモジュール構成になっているため、一度ソース版をダウンロードして再ビルドし、ログ関係のモジュールを置き換える必要がある。ビルドに必要なものは以下の通り。
- Tomcat 6.0.x のソース配布版
- Ant 1.6 または 1.7
- Java2 SE 5.0 (or later とあるが、一部メソッドの追加されたインターフェースをコンパイルできないため 6 では NG)
以下、ビルド手順。現時点でダウンロードファイルのリンク切れや必須ディレクトリがないなどの問題があるため、トラブルの対処には Java+Ant の知識がないとつらいかもしれない。
- Tomcat 6.0 のソースアーカイブを適当なディレクトリに解凍する (以下
${TOMCAT_SRC}
とする)。 - コンソールやコマンドプロンプトを開いて
${TOMCAT_SRC}
に移動。 -
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
へ変更した)。 - 全ファイルダウンロードが完了したら
ant
コマンドでフルビルドを行う。途中 「output/classes
ディレクトリが無い」 というようなエラーが出たら該当ディレクトリを作成して再実行する。 - フルビルドが完了した時点でバイナリ配布版相当のモジュールが出来上がった状態である。これに 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 本くらい飲めるのかな? (笑)