Apache James 3.7.2 Spring - SLF4J: No SLF4J providers were found - java

I downloaded a binary distribution of Apache James, the Spring wired distribution.
I run it but I get the below error:
C:\prod\james-server-spring-app-3.7.2\bin>run
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.
SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier.
SLF4J: Ignoring binding found at [jar:file:/C:/prod/james-server-spring-app-3.7.2/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See https://www.slf4j.org/codes.html#ignoredBindings for an explanation.
https://james.apache.org/server/monitor-logging.html
The distribution is unchanged but in "\conf" folder there is not the "log4j.properties" as stated in the official documentation.
Instead there is the "log4j2.xml" file.
In "\lib" folder there are the below libs:
slf4j-api-2.0.1.jar
log4j-api-2.17.1.jar
log4j-core-2.17.1.jar
log4j-slf4j-impl-2.17.1.jar
Please could someone help me to start James in mode that I can follow the activities?
Thank you in advance.
Ivano

SOLVED
The important message is the below:
SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier.
So I replaced the libs distribued from Apache James community with the below libs:
log4j-api-2.19.0.jar
log4j-core-2.19.0.jar
log4j-slf4j2-impl-2.19.0.jar
slf4j-api-2.0.5.jar
The above combination of libs makes slf4j happy to works with log4j log provider.

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. :)

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.

Using solrj library

I'm trying to use solrj library in order to do some indexing work on my Cloudera Sorl server.
At this point
String zkHostString = "http://xxx.xxx.xxx.xxx:xxxx/solr";
CloudSolrClient solr = new CloudSolrClient(zkHostString);
I got 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
File slf4j-api-1.7.7.jar exists in my library path (I got all jar files from /dist and /dist/solrj-lib)
To build my project I'm using Eclipse if it doues matter.
Most likely you have old version of slf4j in your classpath, that came from a transitive dependency. Try to check this and then run dependency tree or any other tool to find and resolve the conflicts.

failed to load class 'org.slf4j.impl.StaticLoggerBinder'

I created a jar file with all the dependencies, and I implemented the logging using slf4j + logback. Thus I have a logback.xml file defined for all the loggers. However when I run the jar it gave me this message:
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 dont see any logging happening. After I unzip the jar file, I can see the org.slf4j folder. I don't know why this is not working.
From http://www.slf4j.org/codes.html#StaticLoggerBinder (the link in the message):
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. SINCE 1.6.0 As of SLF4J version 1.6, in
the absence of a binding, SLF4J will default to a no-operation (NOP)
logger implementation. You can download SLF4J bindings from the
project download page.
In other words, you need a slf4j backend in your classpath, e.g. logback.
It seems logback-classic.jar is missing from classpath.
Take a look at http://slf4j.org/manual.html#swapping.
Is this a scala project? If yes then adding the below dependency will help. It worked for me.
"org.slf4j" % "slf4j-simple" % "1.7.12"

Categories

Resources