Wenn ich loszuwerden, meine 'mehrere SLF4J Bindungen' Warnung das logging nicht mehr funktioniert

Ich habe die folgende Verzeichnisstruktur in 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 zum Leben braucht in das tomcat/lib-Verzeichnis so wie es ist enthält die benötigten Klassen des tomcat-Start als Globale Ressource. Er schreibt, es ist die Protokollierung zu slf4j, so braucht auch die slf4j und logback Gläser. Es verwendet eine JoranConfigurator zu laden myStateLogback.xml.

myApp webapp schreibt es logging-commons-logging, aber ich will es durchgehen, slf4j zu logback in Vorbereitung für den Umzug alle unsere Protokollierung zu slf4j, so dass ich mit der jcl-over-slf4j-bridge.

Mit dem obigen setup das logging funktioniert alles, aber ich bekomme folgende Warnung beim Start:

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]

Wenn ich logback-classic-aus der webapp lib dir, bekomme ich die folgende exception:

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)

Wenn ich entfernen Sie die 2 logback Gläser, und die slf4j-api.jar von den webapp-lib " Verzeichnis, bekomme ich keine Warnungen und keine Ausnahmen, aber die logs von meinem webapp abgeholt werden die myStateLogback.xml Datei und gehen Sie zu der logger, die ich nicht will. Ich weiß, ich kann filtern, die Aussagen, die ich nicht will, aber ich will, separate config-Dateien für die webapp und die jar. Gibt es eine Möglichkeit, dies zu erreichen?

Ich bin mit tomcat 6.0.23, logback Version 0.9.29 und slf4j 1.6.3.

Dank,
Sarah

InformationsquelleAutor ssloan | 2012-01-06
Schreibe einen Kommentar