snbhsmt_log

ネットワークとコンピュータ、その他いろいろ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tomcat 5.0.14 以降のログ出力に Log4J を利用する

Tomcat のログ出力に Log4J を利用する場合、 5.0.14 以前と以降では異なる設定が必要らしい。

5.0.13 までは 4.1.x の頃と同じだったけど、5.0.14 以降は Commons Logging API パッケージを System クラスローダで読み込む必要があるらしく、bin/commons-logging-api.jar が起動時にクラスパスにセットされる様になっている。 Tomcat のクラスローダ階層からすると、System クラスローダにてロードされた Commons Logging API パッケージから Log4J API パッケージを参照可能にする為には、 同じく System クラスローダにてロードさせる必要がある。 つまり、Log4J 関連のファイルも Tomcat 起動時のクラスパスに含める必要がある という事になる。

標準の起動スクリプトである catalina.sh には、ユーザが起動時のクラスパスに クラスを追加する方法が無いので、catalina.sh を編集するしかない。 行った方法は以下。

まず、commons-logging.jar と log4j-*.jar を何処かに置く。 ここでは $CATALINA_HOME/bin に置く事にする。
あと設定ファイル (log4j.xml / log4j.properties) をクラスパス経由で検索させるなら、 それも何処かに置く。 ここでは $CATALINA_BASE/classes ディレクトリを作成して、 log4j.xml をそのディレクトに置く事にする。
そして上記 JAR ファイルと設定ファイルがクラスパスに設定される様に catalina.sh を変更する。 ここでは以下の様に変更した。

#CLASSPATH="$CLASSPATH":"$CATALINA_HOME"/bin/bootstrap.jar:"$CATALINA_HOME"/bin/commons-logging-api.jar

if [ -z "$CATALINA_BASE" ] ; then
  CATALINA_BASE="$CATALINA_HOME"
fi

CLASSPATH="$CLASSPATH":"$CATALINA_HOME"/bin/bootstrap.jar:"$CATALINA_HOME"/bin/commons-logging.jar:"$CATALINA_HOME"/bin/log4j-1.2.8.jar:"$CATALINA_BASE"/classes

問題点:
ウェブアプリで Commons Logging や Log4J を用いる場合、 WEB-INF/{lib,classes} のものよりも System クラスローダでロードされたものが 優先されてしまう。 だから WEB-INF/classes/log4j.properties などの個別の設定も参照されず、 すべて $CATALINA_BASE/classes/log4j.properties で設定しなければならない。

  • Tomcat 5.0.28
  • Commons Logging 1.0.4
  • Log4J 1.2.8

スポンサーサイト

« Blojsom をインストール|Top|catalina.properties »

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://snbhsmt.blog110.fc2.com/tb.php/15-4a2ce42b

Top

HOME

snbhsmt

Author:snbhsmt
Google Profiles

http://www.ksky.ne.jp/~snbhsmt/

全ての記事を表示する

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。