私は奇妙な問題を抱えています。私はこれを持っていましたJava以前にTomcatにデプロイされていて、slf4j実装としてlogback classicをうまく使っていたアプリケーションです。今、同じアプリをjboss 7.1.finalサーバーにデプロイしようとしたとき、 _Java.lang.ClassCastException: org.slf4j.impl.Slf4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext
_についてアプリケーションをデプロイすることもできますこれは問題のコード行です
final LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
彼のクラスはスプリングインジェクションされており、失敗しています-したがって、アプリケーション全体をデプロイすることはできません。誰かがこれに対する解決策を得ましたか?前もって感謝します
このサイトと他のフォーラムを調べたところ、Jboss 7には独自のslf4j実装がバンドルされており、logbackのLoggerContextと同じILoggerFactoryインターフェースが実装されていることに気付きました。私たちのアプリケーションは同じインスタンスを取得しようとしましたが、アプリサーバーは独自のslf4j実装を課しています。
Jboss\modules\org\slf4j\impl\mainにあるmodule.xmlを変更して、logback jarを指すようにしました。
_<resources>
<resource-root path="logback-classic-0.9.28.jar"/>
<resource-root path="logback-core-0.9.28.jar"/>
</resources>
_
アプリケーションを起動すると、重大なエラーが発生します
_Exception starting filter WicketFilter: Java.lang.ClassCastException: ch.qos.logback.classic.LoggerContext cannot be cast to ch.qos.logback.classic.LoggerContext
_
私は私の知恵の終わりにいます。 jbossとlogbackのエキスパートがお手伝いできますか?前もって感謝します
サーバーバージョンのslf4jをデプロイメントから除外する必要があります。 jboss-deployment-structure.xml
ファイルを作成してWARSに配置しますMETA-INF
またはWEB-INF
ディレクトリ。
ファイルの内容は次のようになります。
<jboss-deployment-structure>
<deployment>
<!-- Exclusions allow you to prevent the server from automatically adding some dependencies -->
<exclusions>
<module name="org.slf4j" />
<module name="org.slf4j.impl" />
</exclusions>
</deployment>
</jboss-deployment-structure>
アプリでjulまたはjclのブリッジを使用している場合は、それらも除外する必要があります。
<module name="org.slf4j" />
<module name="org.slf4j.jcl-over-slf4j" />
<module name="org.slf4j.impl" />
<module name="org.jboss.logging.jul-to-slf4j-stub" />
別のアプローチがあります:
JBossのログ記録を完全に無効にし、戦争の依存関係に依存するだけです。 jboss-deployment-structure.xml
を次のように編集します。
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
<deployment>
<exclusions>
<module name="org.Apache.commons.logging" />
<module name="org.Apache.log4j" />
<module name="org.jboss.logging" />
<module name="org.jboss.logging.jul-to-slf4j-stub" />
<module name="org.jboss.logmanager" />
<module name="org.jboss.logmanager.log4j" />
<module name="org.slf4j" />
<module name="org.slf4j.impl" />
<module name="org.slf4j.jcl-over-slf4j" />
</exclusions>
</deployment>
</jboss-deployment-structure>
アプリをデプロイすると、bootstrapロギング(boot.log)は引き続き機能します。server.logにもデプロイメントロギングが表示されます。ただし、すべてのアプリケーションは(この例では)slf4j + logbackあなたの戦争。
JBossを-Dorg.jboss.logging.provider=slf4j
で実行する必要はないことに注意してください。これを指定する場合、JBossモジュール(通常はslf4j-api、logback-classicおよびlogback-core)を提供する必要がありますが、努力する価値はありません。 、JBossロギングがbootstrap(boot.log)およびデプロイメント情報(server.log)にのみ使用されるようになったため。
参照:
http://tinyapps.blogspot.com/2013/01/getting-logback-and-slf4j-to-work-in.html
https://stackoverflow.com/a/19695680/258734