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

37
demandé sur simont 2012-03-01 19:13:39

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>
58
répondu James R. Perkins 2012-03-01 17:09:49

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" />
7
répondu Torsten Krah 2015-04-01 14:05:29

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

2
répondu Vlastimil Ovčáčík 2017-05-23 11:54:48