Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Boot: multiple SLF4J bindings

This is probably a repeated question, but i can't figure it out where is the binding collision. I have my Spring Boot 1.2.6.RELEASE service and i'm getting this error when i run it:

SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/home/jscherman/.m2/repository/ch/qos/logback/logback-classic/1.1.3/logback-classic-1.1.3.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/home/jscherman/.m2/repository/org/slf4j/slf4j-log4j12/1.7.12/slf4j-log4j12-1.7.12.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder] 

This is the mvn dependency:tree output

[INFO] com.myenterprise:product-manager:jar:0.0.1-SNAPSHOT [INFO] +- com.myenterprise.product:myproject-api:jar:0.0.1-SNAPSHOT:compile [INFO] +- com.myenterprise.product:myproject-core:jar:0.0.1-SNAPSHOT:compile [INFO] +- org.springframework.boot:spring-boot-starter-web:jar:1.2.6.RELEASE:compile [INFO] |  +- org.springframework.boot:spring-boot-starter-tomcat:jar:1.2.6.RELEASE:compile [INFO] |  |  +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.0.26:compile [INFO] |  |  +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.0.26:compile [INFO] |  |  +- org.apache.tomcat.embed:tomcat-embed-logging-juli:jar:8.0.26:compile [INFO] |  |  \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.0.26:compile [INFO] |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.4.6:compile [INFO] |  |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.4.6:compile [INFO] |  |  \- com.fasterxml.jackson.core:jackson-core:jar:2.4.6:compile [INFO] |  +- org.hibernate:hibernate-validator:jar:5.1.3.Final:compile [INFO] |  |  +- javax.validation:validation-api:jar:1.1.0.Final:compile [INFO] |  |  +- org.jboss.logging:jboss-logging:jar:3.1.3.GA:compile [INFO] |  |  \- com.fasterxml:classmate:jar:1.0.0:compile [INFO] |  +- org.springframework:spring-core:jar:4.1.7.RELEASE:compile [INFO] |  +- org.springframework:spring-web:jar:4.1.7.RELEASE:compile [INFO] |  |  \- org.springframework:spring-aop:jar:4.1.7.RELEASE:compile [INFO] |  \- org.springframework:spring-webmvc:jar:4.1.7.RELEASE:compile [INFO] |     \- org.springframework:spring-expression:jar:4.1.7.RELEASE:compile [INFO] +- org.springframework.boot:spring-boot-starter-data-jpa:jar:1.2.6.RELEASE:compile [INFO] |  +- org.springframework.boot:spring-boot-starter-aop:jar:1.2.6.RELEASE:compile [INFO] |  |  +- org.aspectj:aspectjrt:jar:1.8.6:compile [INFO] |  |  \- org.aspectj:aspectjweaver:jar:1.8.6:compile [INFO] |  +- org.springframework.boot:spring-boot-starter-jdbc:jar:1.2.6.RELEASE:compile [INFO] |  |  +- org.springframework:spring-jdbc:jar:4.1.7.RELEASE:compile [INFO] |  |  +- org.apache.tomcat:tomcat-jdbc:jar:8.0.26:compile [INFO] |  |  |  \- org.apache.tomcat:tomcat-juli:jar:8.0.26:compile [INFO] |  |  \- org.springframework:spring-tx:jar:4.1.7.RELEASE:compile [INFO] |  +- org.hibernate:hibernate-entitymanager:jar:4.3.11.Final:compile [INFO] |  |  +- org.jboss.logging:jboss-logging-annotations:jar:1.2.0.Beta1:compile [INFO] |  |  +- org.hibernate:hibernate-core:jar:4.3.11.Final:compile [INFO] |  |  |  +- antlr:antlr:jar:2.7.7:compile [INFO] |  |  |  \- org.jboss:jandex:jar:1.1.0.Final:compile [INFO] |  |  +- dom4j:dom4j:jar:1.6.1:compile [INFO] |  |  |  \- xml-apis:xml-apis:jar:1.0.b2:compile [INFO] |  |  +- org.hibernate.common:hibernate-commons-annotations:jar:4.0.5.Final:compile [INFO] |  |  +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile [INFO] |  |  \- org.javassist:javassist:jar:3.18.1-GA:compile [INFO] |  +- javax.transaction:javax.transaction-api:jar:1.2:compile [INFO] |  +- org.springframework:spring-orm:jar:4.1.7.RELEASE:compile [INFO] |  +- org.springframework.data:spring-data-jpa:jar:1.7.3.RELEASE:compile [INFO] |  |  +- org.springframework.data:spring-data-commons:jar:1.9.3.RELEASE:compile [INFO] |  |  \- org.slf4j:slf4j-api:jar:1.7.12:compile [INFO] |  \- org.springframework:spring-aspects:jar:4.1.7.RELEASE:compile [INFO] +- mysql:mysql-connector-java:jar:5.1.36:compile [INFO] +- org.flywaydb:flyway-core:jar:3.1:compile [INFO] +- org.springframework.security.oauth:spring-security-oauth2:jar:2.0.7.RELEASE:compile [INFO] |  +- org.springframework:spring-beans:jar:4.1.7.RELEASE:compile [INFO] |  +- org.springframework:spring-context:jar:4.1.7.RELEASE:compile [INFO] |  +- org.springframework.security:spring-security-core:jar:3.2.8.RELEASE:compile [INFO] |  |  \- aopalliance:aopalliance:jar:1.0:compile [INFO] |  +- org.springframework.security:spring-security-config:jar:3.2.8.RELEASE:compile [INFO] |  +- org.springframework.security:spring-security-web:jar:3.2.8.RELEASE:compile [INFO] |  +- commons-codec:commons-codec:jar:1.6:compile [INFO] |  \- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.13:compile [INFO] |     \- org.codehaus.jackson:jackson-core-asl:jar:1.9.13:compile [INFO] +- org.springframework.boot:spring-boot-starter:jar:1.2.6.RELEASE:compile [INFO] |  +- org.springframework.boot:spring-boot:jar:1.2.6.RELEASE:compile [INFO] |  +- org.springframework.boot:spring-boot-autoconfigure:jar:1.2.6.RELEASE:compile [INFO] |  \- org.yaml:snakeyaml:jar:1.14:compile [INFO] +- org.springframework.boot:spring-boot-starter-log4j:jar:1.2.6.RELEASE:compile [INFO] |  +- org.slf4j:jcl-over-slf4j:jar:1.7.12:compile [INFO] |  +- org.slf4j:jul-to-slf4j:jar:1.7.12:compile [INFO] |  +- org.slf4j:slf4j-log4j12:jar:1.7.12:compile [INFO] |  \- log4j:log4j:jar:1.2.17:compile [INFO] \- org.springframework.boot:spring-boot-starter-test:jar:1.2.6.RELEASE:compile [INFO]    +- junit:junit:jar:4.12:compile [INFO]    +- org.mockito:mockito-core:jar:1.10.19:compile [INFO]    |  \- org.objenesis:objenesis:jar:2.1:runtime [INFO]    +- org.hamcrest:hamcrest-core:jar:1.3:compile [INFO]    +- org.hamcrest:hamcrest-library:jar:1.3:compile [INFO]    \- org.springframework:spring-test:jar:4.1.7.RELEASE:compile 

So, apparently the problem is that logback is still in classpath, but i couldn't find it in the output so i don't know where is the problem.

Can you spot the error? I would appreciate your help


EDIT

This only happens when i run the server as Spring Boot Application. If i run it as java application, the error is gone... any ideas?

like image 650
jscherman Avatar asked Oct 11 '15 22:10

jscherman


People also ask

What is SLF4J bindings?

Bindings are basically implementations of a particular SLF4J class meant to be extended to plug in a specific logging framework. By design, SLF4J will only bind with one logging framework at a time. Consequently, if more than one binding is present on the classpath, it will emit a warning.

How do I know if SLF4J is binding?

Put a breakpoint on .. say.. LOG.info(...). Once debugger stops there, step into.. and viola.. you will find yourself in the code of the actual logger... say log4j or logback..

What is SLF4J jdk14?

slf4j is Simple Logging Facade for Java .


1 Answers

I had the exact same problem and could only see the dependency coming from spring boot. It also brought in log4j-over-slf4j, which clashed with my own requirement of slf4j-log4j12. Solved by adding the exclusions below. This is more specific that excluding the spring boot logging.

<dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter</artifactId>     <exclusions>         <exclusion>             <artifactId>logback-classic</artifactId>             <groupId>ch.qos.logback</groupId>         </exclusion>         <exclusion>             <artifactId>log4j-over-slf4j</artifactId>             <groupId>org.slf4j</groupId>         </exclusion>     </exclusions> </dependency> 
like image 66
Stephen Avatar answered Oct 14 '22 17:10

Stephen