WASで垂直分散した際のログの出力先設定

とりあえずこれでいくことにしたので、結果だけ報告。

  • 構成
    • アプリケーション・サーバー:IBM WebSphere Application Server for Network Deployment, 5.0.2.4
    • Log4J:1.2.8
  • 状況
  • 問題
    • 二つのプロセスから同じファイルにログを書き込んでしまう。
  • 現象
    • 普段は一見問題がなさそうに見えるが、Log4Jがログファイルのバックアップを行う際に不具合が起こる。具体的には、RollingFileAppenderを使用した際に、バックアップに失敗して新しいファイルだけ作成されて中身が無かったり、最新のログファイルの中身が消えたりする。
  • 解決方法
    1. ファイルに書くのを止め、DB等にログを格納する。
    2. ログの出力先を別にする。方法としては以下のようにした。
      1. RollingFileAppenderを継承したクラスを作り、ファイル名がセットされるメソッドをオーバーライドする。
      2. オーバーライドしたメソッドで、ファイル名を変換するようにする。その際、WASのアプリケーション・サーバー名等、それぞれのプロセスで違う値が取得できるようなものを使用する。ちなみにサーバー名はServletContextから取れた。
      3. log4j.xmlで、作成したクラスをログ出力クラスとして指定する。

いや〜、久しぶりに楽しかった。業務は中身がわからんからあんまりおもんないなぁ。あ、もっと良い方法があったら教えてください m(__)m

(2004/10/01追記)今の所、うまく動いてるっぽい。