When Use with slf4j,
String test = blahblahblah;
logger.info("{}",test);
Trace as below
java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.format(Ljava/lang/String;Ljava/lang/Object;)Lorg/slf4j/helpers/FormattingTuple;
at org.slf4j.impl.JDK14LoggerAdapter.info(JDK14LoggerAdapter.java:304)
This looks like you have a different version of the MessageFormatter class than your JDK14LoggerAdapter class. Control your classpath.
Looks like you have a version mis-match between the various SLF4J API and integration libraries. SLF4J is extremely twitchy when it comes to version compatibility (e.g. 1.6.x is not backwards compatible with 1.5.x).
Make sure the various JAR versions match, and make sure there are no duplicate JARs on the classpath.
In my case, we are having correct version match between the various SLF4J API and integration libraries. But we are also using
tika-app
jar, which also have SLF4J classes wrapped inside it.To check if you are also having some (fat)jar which contains SLF4J classes, On Unix system:
Go to your WEB-INF/lib/ directory and run following command
for i in *.jar; do jar -tvf "$i" | grep -Hsi MessageFormatter && echo "$i"; done
This will print matching result from all jars on console.
Finally, we replaced
tika-app
jar bytika-core
jar.In my case, I was getting the same "java.lang.NoSuchMethodError" deploying an EAR file to JBoss EAP 5.2.
The logs showed:
SLF4J: The requested version 1.5.6 by your slf4j binding is not compatible with [1.6]
Logs: (server.log)
Problem:
The problem was having two different versions of slf4j-api jars on the classpath. (slf4j-log4j12-1.5.6.jar, slf4j-api-1.6.1.jar)
Resolution:
Also make sure if you deploy in Glassfish externally (not locally) to remove duplicate dependencies in the lib folder of the Glassfish installation on that server.
In my case, everything worked fine locally but once deployed on a server I got this error.
I was getting this error:
Now I just commented line with version from pom.xml, as shown below, and it is working now: