[slf4j-user] SLF4J incorrectly determines that Class path contains multiple SLF4J bindings

Ceki Gulcu ceki at qos.ch
Thu Jul 23 16:35:54 CEST 2009


Hello Ari,

It's a known problem with Weblogic. Please see:

   http://bugzilla.slf4j.org/show_bug.cgi?id=138

Since only Weblogic seems to suffer from this issue, I am leaving it
open for the time being.

BR

Ari Meyer wrote:
> Hi,
> 
> I get this warning in my Eclipse console (using WTP to connect to 
> WebLogic 10.3):
> 
> SLF4J: Class path contains multiple SLF4J bindings.
> SLF4J: Found binding in [zip:C:/Documents and 
> Settings/Owner.ZEN/.m2/repository/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
> 
> SLF4J: Found binding in [zip:C:/Documents and 
> Settings/Owner.ZEN/.m2/repository/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
> 
> SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an 
> explanation.
> 
> Somehow, it's seeing multiple bindings, when they are in fact the same.  
> I'm not sure how this is happening (I use Maven and the 
> maven-eclipse-plugin for configuration).  Referencing this code from 
> LoggerFactory:
> 
>  private static String STATIC_LOGGER_BINDER_PATH = 
> "org/slf4j/impl/StaticLoggerBinder.class";
> 
>  private static void singleImplementationSanityCheck() {
>    try {
>      Enumeration paths = LoggerFactory.class.getClassLoader().getResources(
>          STATIC_LOGGER_BINDER_PATH);
>      List implementationList = new ArrayList();
>      while (paths.hasMoreElements()) {
>        URL path = (URL) paths.nextElement();
>        implementationList.add(path);
>      }
>      if (implementationList.size() > 1) {
>        Util
>            .reportFailure("Class path contains multiple SLF4J bindings.");
>        for(int i = 0; i < implementationList.size(); i++) {
>          Util.reportFailure("Found binding in 
> ["+implementationList.get(i)+"]");
>        }
>        Util.reportFailure("See " + MULTIPLE_BINDINGS_URL
>            + " for an explanation.");
>      }
>    } catch (IOException ioe) {
>      Util.reportFailure("Error getting resources from path", ioe);
>    }
>  }
> 
> ... somehow, the Enumeration "paths" must have 2 elements that happen to 
> be identical -- probably due to my multiple WAR within EAR config (if I 
> shared my utility JAR at the EAR level, this probably won't show up).
> 
> Simple fix: change implementationList from List to Set -- this way there 
> will be no duplicates.
> 
> Best regards,
> Ari
> 

-- 
Ceki Gülcü
Logback: The reliable, generic, fast and flexible logging framework for Java.
http://logback.qos.ch



More information about the slf4j-user mailing list