Logback et Jboss 7-vous ne travaillez pas ensemble?
j'ai un curieux problème. J'ai eu cette application Java qui a été précédemment déployée dans tomcat et heureusement utilisé logback classic comme une implémentation slf4j. Maintenant, quand nous avons essayé de déployer la même application dans un jboss 7.1.le serveur final il ne déploie même pas l'application
java.lang.ClassCastException: org.slf4j.impl.Slf4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext
C'est la ligne de code malveillant
final LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
la classe qui a le sien est le ressort injecté et qui échoue - par conséquent, toute l'application ne peut pas être déployée. Quelqu'un a une solution à présent? Merci à l'avance
après avoir regardé ce site et d'autres forums, j'ai réalisé que Jboss 7 est livré avec sa propre implémentation slf4j et implémente la même interface ILoggerFactory que LoggerContext dans logback. Notre application a essayé d'obtenir une instance de la même, mais le serveur d'application impose sa propre implémentation slf4j.
j'ai essayé de modifier le module.xml in jbossmodulesorgslf4jimplmain et pointé vers logback pot.
<resources>
<resource-root path="logback-classic-0.9.28.jar"/>
<resource-root path="logback-core-0.9.28.jar"/>
</resources>
maintenant quand je démarre l'application je reçois une grave erreur
Exception starting filter WicketFilter: java.lang.ClassCastException: ch.qos.logback.classic.LoggerContext cannot be cast to ch.qos.logback.classic.LoggerContext
je suis à bout de ressources. Des experts jboss et logback peuvent vous aider? Merci à l'avance
3 réponses
vous devez exclure la version des serveurs de slf4j de votre déploiement. Créer un jboss-deployment-structure.xml
fichier et le placer dans votre WARS META-INF
ou WEB-INF
répertoire.
Le contenu du fichier devrait ressembler à ceci:
<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>
Si vous utilisez les ponts pour juillet ou jcl dans votre application, vous devez exclure trop:
<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" />
Il n'est autre approche:
- vous avez configuré la journalisation dans votre guerre
- vous avez obtenu toutes les dépendances dans votre guerre
- vous ne configurez rien dans le répertoire du serveur JBoss, pas même les modules supplémentaires JBoss
il suffit de désactiver complètement la journalisation JBoss et de compter sur les dépendances dans votre guerre. Modifier votre jboss-deployment-structure.xml
comme suit:
<?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>
une fois que vous avez déployé votre application, bootstrap logging (boot.journal) fonctionne aussi sur le serveur.log affichera l'enregistrement du déploiement. Mais toute votre application est journalisée via votre (dans cet exemple) slf4j+logback dans votre guerre.
Notez que vous ne devez pas exécuter JBoss -Dorg.jboss.logging.provider=slf4j
, si vous spécifiez cela, vous devrez fournir les modules JBoss (typiquement slf4j-api, logback-classic et logback-core), mais cela n'en vaut pas la peine, car la journalisation JBoss est maintenant utilisée uniquement pour bootstrap (boot.log) et pour les informations de déploiement (serveur.journal.)
References:
http://tinyapps.blogspot.com/2013/01/getting-logback-and-slf4j-to-work-in.html
https://stackoverflow.com/a/19695680/2587343