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で修正されたっぽい…?)