Si je me débarrasser de mes multiples SLF4J Liaisons' avertissement de l'enregistrement des arrêts de travail

J'ai la structure de répertoire suivante dans tomcat 6:

tomcat
|-lib
|  |- logback-classic.jar
|  |- logback-core.jar
|  |- slf4j-api.jar
|  |- myState.jar
|-shared
|  |-lib
|  |  |- myStateLogback.xml
|-webapps
|  |-myApp
|  |  |-WEB-INF
|  |  |  |-logback.xml
|  |  |  |-lib
|  |  |  |  |-jcl-over-slf4j.jar
|  |  |  |  |-logback-classic.jar
|  |  |  |  |-logback-core.jar
|  |  |  |  |-slf4j-api.jar

myState.jar besoin de vivre dans le tomcat/lib car il est contient les classes nécessaires sur le démarrage de tomcat en tant que ressource mondiale. Il l'écrit sur l'exploitation forestière à slf4j donc également besoin de la slf4j et logback pots. Il utilise un JoranConfigurator à charge myStateLogback.xml.

myApp webapp, écrit-il sur l'exploitation forestière à commons-logging, mais je veux aller à travers slf4j à logback en préparation pour le déplacement de toutes nos journalisation de slf4j, donc je suis en utilisant le jcl-sur-slf4j pont.

Avec la configuration ci-dessus, l'exploitation de tous travaux, mais je reçois le message d'avertissement suivant au démarrage:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/tomcat/lib/logback-classic-0.9.29.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/tomcat/webapps/myApp/WEB-INF/lib/logback-classic-0.9.29.jar!/org/slf4j/impl/StaticLoggerBinder.class]

Si je prends logback-classique de la webapp du dossier lib, j'obtiens l'exception suivante:

Exception in thread "Timer-30" java.lang.LinkageError: loader constraint violation: when resolving method "org.slf4j.impl.StaticLoggerBinder.getLoggerFactory()Lorg/slf4j/ILoggerFactory;" the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, org/slf4j/LoggerFactory, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, org/slf4j/impl/StaticLoggerBinder, have different Class objects for the type org/slf4j/ILoggerFactory used in the signature
        at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:284)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:252)
        at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:156)
        at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
        at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:272)

Si je supprime les 2 logback les pots, et la slf4j-api.jar à partir de la webapp le répertoire lib, je n'ai pas de mises en garde et aucune des exceptions, mais les journaux de ma webapp sont captés par l'myStateLogback.xml fichier et aller à l'enregistreur, que je ne veux pas. Je sais que je peux filtrer les déclarations je ne veux pas, mais je veux avoir séparé les fichiers de configuration de la webapp et le bocal. Est-il un moyen pour y parvenir?

Je suis en utilisant tomcat 6.0.23, logback 0.9.29 et slf4j 1.6.3.

Grâce,
Sarah

OriginalL'auteur ssloan | 2012-01-06