First of all, SLF4J is a simple facade for various registration frameworks (for example, java.util.logging, logback, log4j), allowing the end user to connect the required logging structure during deployment.
What does this mean in simple words?
When you use SLF4J, your code will depend on one common logging interface provided by SLF4J (SLF4J-API), and on the other hand you will connect the framework of your choice to SLF4J, which allows you to switch different logging frames easily.
So, all the calls that you use in your code when using the SLF4J facade will be delegated to the basic logging structure.
From the figure, you can see that each time your application uses one common SLF4J API with various forms of logs.

Now let's look at your Gradle output:
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/i/.gradle/caches/modules- 2/files-2.1/org.slf4j/slf4j- log4j12/1.6.1/bd245d6746cdd4e6203e976e21d597a46f115802/slf4j-log4j12- 1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/C:/Users/i/.gradle/caches/modules-2/files- 2.1/ch.qos.logback/logback- classic/1.1.3/d90276fff414f06cb375f2057f6778cd63c6082f/logback-classic- 1.1.3.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html
This is the situation of two different bindings of the SLF4J frameworks, the first on which org.slf4j / slf4j-log4j12 , which is the LOG4J logging framework , and the second is ch.qos.logback / logback-classic , which is the Logback logging framework , a built-in implementation of the SLFJ API.
So, to solve your problem you need to exclude one of them from your class path.
In particular, the problem artifact org.apache.zookeeper:zookeeper:3.4.5 allows you to exclude one of the registration frameworks:
dependencies { compile('org.apache.zookeeper:zookeeper:3.4.5') { exclude group: 'ch.qos.logback', module: 'logback-classic' }
Link: SLF4J User Guide