Java sl4j-log4j logging libraries not working properly - java

.
I'm trying to compile a java program using these jars(screenshot) but getting these errors:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/vanar/workspace/TwitterKafka/logback-classic-1.1.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/vanar/workspace/TwitterKafka/slf4j-log4j12-1.7.5.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]
Exception in thread "hosebird-client-io-thread-0" java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V
at org.apache.commons.logging.impl.SLF4JLocationAwareLog.debug(SLF4JLocationAwareLog.java:120)
at org.apache.http.impl.conn.PoolingClientConnectionManager.shutdown(PoolingClientConnectionManager.java:276)
at com.twitter.hbc.httpclient.ClientBase.run(ClientBase.java:165)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
how do I ensure all these logging components work together?
I am stumped as to what is compatible with what and do not know a way apart from trial and error which I tried with no luck. please help

You can try to add logging jar files to endorsed directory.

Use latest combination of slf4j-log4j .You are using older version of any one of this jars.

add log4j and sl4j jar in this combination. if any one is missing exception raised while logging.

Related

Package dependencies in a jar

I'm trying with a .jar library but the init method has a call to slf4j. I have added slf4j to my dependencies Project but I believe that I need to repackage the library with the dependency inside the jar.
The method I'm calling in the jar has this line:
private static final org.slf4j.Logger LOG =
org.slf4j.LoggerFactory.getLogger(Init.class);
But I have this error:
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.
You also need an slf4j implementation, just as your error said. There are multiple. Here are a two:
slf4j-simple: it prints out to your console/terminal
log4j-slf4j-impl: The Apache Log4j SLF4J API binding to Log4j 2 Core
If you need just the .jar, choose your needed version and you can download it under files.
If you need more help, the official manual explains it quite good.
Hope I could help you

Gradle SLF4J Redshift JDBC conflict

I need to update the version of JDBC Redshift driver in gradle and it looks like 1.3X has the following problem:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:~/.gradle/caches/modules-2/files-2.1/com.amazon.redshift/redshift-jdbc42/1.2.37.1061/daad21f8637b6ccd2b86307a4f17e1e215df7365/redshift-jdbc42-1.2.37.1061.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:~/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.2.3/7c4f3c474fb2c041d8028740440937705ebb473a/logback-classic-1.2.3.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 [org.slf4j.impl.Log4jLoggerFactory]
I can exclude ch.qos.logback/logback-classic globally, but I'm wondering if there's a better way around that since I'd rather disable the unexpected duplicate logger from com.amazon.redshift/redshift-jdbc42
The sl4j dependency seems to have been added starting at version 1.2.34.1058. You can use any version below that without having the multiple SLF4J bindings.
I hope it helps. :)

Getting debug messages when running Apache velocity template

I'm running Apache velocity template engine (2 latest)
I keep getting below debug messages from SLF4J
This obstructs the user from viewing important messages, is there a way to suppress these messages?
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/user1/Package/installer/lib/slf4j-simple-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/user1/Package/installer/lib/slf4j-simple-1.7.25.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 [org.slf4j.impl.SimpleLoggerFactory]
Message warns you about multiple SLF4J classes,
You have 2 slf4j jars slf4j-simple-1.7.5.jar and slf4j-simple-1.7.25.jar which both have the same class (StaticLoggerBinder),
Remove one of the jars from dependencies and the debug message will disappear.

Multiple SLF4J binding

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/username/.m2/repository/ch/qos/logback/logback-classic/1.1.9/logback-classic-1.1.9.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/username/.m2/repository/org/slf4j/slf4j-simple/1.7.22/slf4j-simple-1.7.22.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/username/.m2/repository/org/slf4j/slf4j-log4j12/1.7.8/slf4j-log4j12-1.7.8.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]
How can I fix this.
Thanks
Slf4j is an interface that can have several implementations. You have three implementations in your dependencies: slf4j-log4j, slf4j-simple and logback-classic. Decide for one and exclude the other dependencies.
You can check solution to slf4j site, search text
"Multiple bindings were found on the classpath"
here
An example given at above site may not be an exact solution, you need to find which all 3rd party library uses slf4j version and exclude them while adding them as a dependency.

Multiple SLF4J bindings

I have two jar files in my classpath which has a dependency with slf4j. This causes a warning message in my Java program:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/lib/slf4j-log4j12-1.7.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/lib/myprogram.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 [org.slf4j.impl.Log4jLoggerFactory]
Is there a way to remove this warning message by only changing the gradle file, and without removing any of above jar files from my classpath?
Thanks
Is there a way to remove this warning message by only changing the gradle file, and without removing any of above jar files from my classpath?
No.
The only way to remove that warning is by providing only a single binding for SLF4J. And you really should do so:
Even when multiple bindings are present, SLF4J will pick one logging framework/implementation and bind with it. The way SLF4J picks a binding is determined by the JVM and for all practical purposes should be considered random.
Since you provide a binding in your own jar, the easiest way to restrict yourself to a single binding would be to exclude the slf4j-log4j12-1.7.6.jar.

Categories

Resources