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
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?
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.
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..
slf4j is Simple Logging Facade for Java .
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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With