How to solve SLF4J exception [duplicate] - java

This question already has answers here:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder"
(35 answers)
Closed 7 years ago.
I am using Tess4j API in creating an OCR system. But after I running he program it gives the following message in Apache Tomcat.
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
I have inserted all the required jar files and dll files. But I don't get the text extracted from the provided image. Is this due to the above message? Please help me.Thank you in advance

As mentioned on http://www.slf4j.org/codes.html
This error is reported when the org.slf4j.impl.StaticLoggerBinder
class could not be loaded into memory. This happens when no
appropriate SLF4J binding could be found on the class path. Placing
one (and only one) of slf4j-nop.jar, slf4j-simple.jar,
slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar on the class
path should solve the problem.
Did you also bind the jar files on your class path?

Related

Java SLF4J warning when starting hive on WINDOWS 10

I am trying to start HIVE 3.1.2 on Hadoop 3.3.0 on my windows 10 PC for training purpose (yes I know linux is better ;-) but someone has to do it anyway). I have the following error message
it looks related to how SLF4J works (I guess) but since I am not a java (or any other language) dev I have no clue how to fix it
For what it worth I do not have an IT background so be gentle and talk to me as if I was 10y/o
Could any one help (BTW it is running on java 8)
$ hive
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/zztop/hadoop/hive/lib/log4j-slf4j-impl-2.14.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/zztop/hadoop/hive/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/zztop/hadoop/share/hadoop/common/lib/slf4j-log4j12-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.apache.logging.slf4j.Log4jLoggerFactory]
WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.apache.logging.log4j.util.PropertiesUtil
at org.apache.logging.log4j.status.StatusLogger.<clinit>(StatusLogger.java:71)
at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:60)
at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:45)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:30)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:301)
at org.apache.hadoop.util.RunJar.<clinit>(RunJar.java:55)
What you are seeing is a misconfiguration of the logging framework, which it detects and complains about, including a link to http://www.slf4j.org/codes.html#multiple_bindings which explains the following:
SLF4J API is designed to bind with one and only one underlying logging
framework at a time. If more than one binding is present on the class
path, SLF4J will emit a warning, listing the location of those
bindings.
When multiple bindings are available on the class path, select one and
only one binding you wish to use, and remove the other bindings. For
example, if you have both slf4j-simple-2.0.0-alpha0.jar and
slf4j-nop-2.0.0-alpha0.jar on the class path and you wish to use the
nop (no-operation) binding, then remove slf4j-simple-2.0.0-alpha0.jar
from the class path.
It is not uncommon to see this problem, when combining multiple things together that bring their own logging backend. The solution is to figure out why (the jars are listed) and only leave one binding.

SoapUI SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”

How to resolve the problem of 'SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”' when running SoapUI (mine is 5.2.1) command-line testrunner.bat?
NOTE: This problem had been answered in a number of places for Maven, Eclipse, etc. but not for SoapUI. E.g.:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". in a Maven Project
The problem, as explained in http://www.slf4j.org/codes.html is that one (and only one) of the following is missing in the classpath: slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar.
I found that adding, e.g. slf4j-simple.jar to [SoapUI-Base]/bin/ext did not work, even though it apparently loaded it:
13:02:26,203 INFO [SoapUI] Adding [C:\Program Files\SmartBear\SoapUI-5.2.1\bin\ext\slf4j-simple-1.6.1.jar] to extensions classpath
13:02:26,983 INFO [DefaultSoapUICore] initialized soapui-settings from [C:\Users\XXX\soapui-settings.xml]
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
What worked was to place slf4j-simple.jar, and more specifically, slf4j-simple-1.6.1.jar (to be compatible with the SLF4J version used in SoapUI 5.2.1) into [SoapUI-Base]/lib.
Hope this helps.
this is solution that help me.
I have downloaded last slf4j package from http://www.slf4j.org/download.html
Delete from SmartBear\SoapUI-5.2.1\lib file slf4j-api
Insert to the SmartBear\SoapUI-5.2.1\lib files from package slf4j-api and slf4j-nop
Now everything works fine.

Failed to load class org.slf4j.impl.StaticLoggerBinder and Unable to load native-hadoop library

I'm new with Hadoop and during one MapReduce task I got the following error:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
15/09/18 07:31:10 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
How can I solve this?
Thanks!
Here's what your errors mean:
For SLF4J:
SLF4J: **Failed to load class** "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
As you can tell, you do not have the appropriate class (*Failed to load class*) for SLF4J to work so it defaults to no logging ((NOP) logger implementation). Following the suggested link you can see that the solution for this is:
Placing one (and only one) of slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar on the class path should solve the problem
For Hadoop:
15/09/18 07:31:10 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
This just means that the native library cannot be found, it generally doesn't affect the way Hadoop functions. As for the native library:
The native library just contains implementations of certain components for performance reasons and for non-availability of Java implementations. These components are available in a single, dynamically-linked native library called the native hadoop library. On the *nix platforms the library is named libhadoop.so.
Anyway, if you really want to get rid of the warning, you can follow one of the many solutions offered here.

Does slf4j use commons-logging implementation by default?

I have only worked with log4j in the past. Now I am scouting a new project and noticing that it uses slf4j 1.7.2. I understand it is only an API specification which provides a simplified interface (AKA facade) to various implementations that conform to it, such as java.util.logging, log4j and logback. However, I noticed that commons-logging wasn't mentioned in the list on the API web site, however, its jar was in this app's classpath. When I removed it from the classpath to check whether it was the used implemetation, I confirmed that it indeed was:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
Is commons-logging indeed the default implementation for slf4j? Because their documentation says:
If no binding is found on the class path, then SLF4J will default to a no-operation implementation.
at the above linked page. And even though I have slf4j-nop-1.7.2.jar in the classpath, which I am guessing the default implementation referred to above is, I still get the exception asking for org/apache/commons/logging/LogFactory if the commons is not in the classpath, so I am confused.
A clarification would be appreciated.
You need a combination of the binding jar AND the logging implementation (JCL in this case) on the classpath.
Binding with a logging framework at deployment time
commons-logging is not the default, but if you have slf4j-jcl-1.7.2.jar on your classpath, it will try to use that. So if you therefore remove JCL from your path, it will complain that it can't find the classes.
slf4j-nop-1.7.2.jar is the no-op "SLF4J bindings" jar, not an implementation in itself.

Xuggler generates error message

I was working on creating my first Xuggler media application. I was coding by watching their video on how to create the first media application.
Code
package demo;
import com.xuggle.xuggler.IContainer;
public class GetContainerInfo {
public static void main(String[] args) {
if(args.length!=1){
throw new IllegalArgumentException("no file");
}
IContainer container = IContainer.make();
if(container.open(args[0],IContainer.Type.READ,null)<0){
throw new IllegalArgumentException("could not open");
}
}
}
Error
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Do I have the dependencies?
Yes, I do! I have all the dependencies. I imported them while creating the project.
Image:
What is causing that error and how do I solve it?
From SLF4J manual:
> SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
> SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J:
> See http://www.slf4j.org/codes.html#StaticLoggerBinder for further
> details.
This warning is printed because no slf4j binding could be found on
your class path. The warning will disappear as soon as you add a
binding to your class path. Assuming you add slf4j-simple-1.7.2.jar so
that your class path contains: slf4j-api-1.7.2.jar
slf4j-simple-1.7.2.jar ...
Cause Could be un-availability of dependency jars or version conflicts.
Adding the following jars in the class path worked fine for me:
xuggle-xuggler-5.4.jar
slf4j-api-1.6.4.jar
logback-core-1.0.0.jar
logback-classic-1.0.0.jar

Categories