読者です 読者をやめる 読者になる 読者になる

ログ出力をslf4j+logbackに統一

JBoss ASとSeamを使ったアプリケーションのログ出力形式をslf4j+logbackに一元化したい。
要するに、JBossのログ出力(Log4jService)の出力をうまく上書いちゃおうとする時の方法について。

アプリが出すログは素直にslf4jを使ってあげればいいのだけど、JBoss AS自身の出すログについては、commons-logging.jarとlog4j.jarをslf4jでラップしてあげる必要がある。

${JBOSS_HOME}\common\libにあるcommons-logging.jarとlog4j.jarをそれぞれ削除して、

  • slf4j-api-x.y.z.jar
  • logback-core-x.y.z.jar
  • logback-classic-x.y.z.jar
  • log4j-over-slf4j-x.y.z.jar
  • jcl-over-slf4j-x.y.z.jar

をクラスパスに追加して起動したが、どうもエラーになってしまった(x.y.zはバージョン)

どうも、log4jのラッパー(log4j-over-slf4j)のバージョンが新しくないとlog4j周りのクラスが完全に定義されていない模様。
今回NoClassDefFoundErrorが出たのはorg.apache.log4j.xml.DOMConfiguratorだったのだが、slf4jのソースコードをダウンロードすると、1.6.0にはこのクラスが存在せず、1.6.4には存在していた。
というか1.6.0にはorg.apache.log4j配下のクラスしか存在しない(リリースノートを見ると1.6.2で修正されたっぽい…?)