- PR -

log4j:servletでコンテクストルートごとに出力先を振り分けたい

1
投稿者投稿内容
あき
会議室デビュー日: 2004/06/22
投稿数: 4
投稿日時: 2004-06-22 19:35
1VM で複数の Webアプリ が動いている環境にて,log4j を利用したログ出力をしています。

  • MDC を利用し,各Webアプリごとに個別の Logger を利用する
  • すべてのアプリの設定を含んだ log4j.xml を作成し,各Webアプリの Servlet.init() にてDOMConfigure している。
    (同じ初期化を複数回行ってしまうが,不問。Webコンテナ起動時のオプション指定も行っていません)


これを,下記のような運用に変更したく思います。

  • 各Webアプリのログ設定を各war内に持たせる

単純に

  • 各Webアプリの war ファイル内に 各Webアプリ用の log4j.xml/.properties を保持する

とすると,後から起動された Servlet の log4j.xml がこれまでの設定を上書きしてしまいます。

そこで,

  • 各Webアプリのログ設定を各war内に持たせる

を実現する方法についてご助言いただけないでしょうか?
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-06-23 09:51
引用:
あきさんの書き込み (2004-06-22 19:35) より:


  • 各Webアプリのログ設定を各war内に持たせる

を実現する方法についてご助言いただけないでしょうか?



Log4J の JAR を、各 Web アプリ固有のクラスローダのクラスパスに
置くと、どうでしょうか。
あき
会議室デビュー日: 2004/06/22
投稿数: 4
投稿日時: 2004-06-23 11:36
共用エリアに配置していた log4j を削除し,各Webアプリの WEB-INF/lib に配置したところ,こちらのやりたいことができるようになりました。

  • 各Webアプリの WEB-INF/classes/log4j.xml にて各アプリごとの設定が可能。
  • MDCを利用せずとも互いに設定が分離されている。
    (各WebアプリでgetRootLogger()すると,各Webアプリ用の RootLogger を取得している)


これまで,Logger などは VM 単位で持ちまわられるものと思い込んでおりました。
個別のクラスローダに担当させればよかったのですね。
java の(そして,oc4j の)クラスローディングまわりをもう少し勉強し直します。
#使用していた Web コンテナは oc4j でした。そういえば,動作環境は全く書いてませんでした。

はしもと様,ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)