与slf4j一起使用时,
String test = blahblahblah;
logger.info("{}",test);
跟踪如下
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)
答案 0 :(得分:43)
看起来各种SLF4J API和集成库之间的版本不匹配。 SLF4J在版本兼容性方面非常抽象(例如1.6.x不向后兼容1.5.x)。
确保各种JAR版本匹配,并确保类路径上没有重复的JAR。
答案 1 :(得分:7)
我收到了这个错误:
SLF4J: The requested version 1.6 by your slf4j binding is not compatible with [1.5.5, 1.5.6]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.format(Ljava/lang/String;Ljava/lang/Object;)Lorg/slf4j/helpers/FormattingTuple;
.
.
.
现在我只是注释了pom.xml中的版本,如下所示,现在它正在运行:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<!-- <version>1.6.5</version> -->
</dependency>
答案 2 :(得分:1)
另外,请确保在外部(非本地)部署Glassfish,以删除该服务器上Glassfish安装的lib文件夹中的重复依赖项。
在我的情况下,一切都在本地工作正常,但一旦部署在服务器上,我就收到了这个错误。
答案 3 :(得分:0)
看起来你有一个与JDK14LoggerAdapter类不同的MessageFormatter类版本。控制你的类路径。
答案 4 :(得分:0)
我希望这是因为版本不兼容,如果你正在运行你的应用程序6.0并持有一个jar文件(slf4j 1.5)或同时持有(slf4j 1.5和1.6)),那么可能会引发异常。
建议是 去寻找合适的版本 不要在构建路径中放置多个版本文件(slf4f 1.5和slf4j 1.6)文件,删除相应的文件和
然后确定,你会得到它。
答案 5 :(得分:0)
就我而言,我们在各种SLF4J API和集成库之间具有正确的版本匹配。但是,我们还使用了tika-app
jar,该jar中还包装了SLF4J类。
要检查您是否还具有一些包含SLF4J类的(fat)jar,请在Unix系统上:
转到您的WEB-INF / lib /目录并运行以下命令
for i in *.jar; do jar -tvf "$i" | grep -Hsi MessageFormatter && echo "$i"; done
这将打印控制台上所有jar的匹配结果。
最后,我们将tika-app
jar替换为tika-core
jar。
答案 6 :(得分:0)
在我的情况下,我得到了相同的“ java.lang.NoSuchMethodError ”,将EAR文件部署到 JBoss EAP 5.2 。
日志显示:
SLF4J:您的slf4j绑定请求的1.5.6版本与[1.6]不兼容
日志:(server.log)
2018-11-05 09:59:46,382 ERROR [STDERR] (main) SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
2018-11-05 09:59:46,395 ERROR [STDERR] (main) SLF4J: The requested version 1.5.6 by your slf4j binding is not compatible with [1.6]
2018-11-05 09:59:46,395 ERROR [STDERR] (main) SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
2018-11-05 09:59:46,402 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/common-scheduling/services]] (main) Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0': Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.format(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String;
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1512)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
at
问题:
问题是在类路径上有两个不同版本的slf4j-api jar。 (slf4j-log4j12-1.5.6.jar,slf4j-api-1.6.1.jar)
解决方案:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.6</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
答案 7 :(得分:0)
Spark Application遇到了同样的问题。 混合使用不同的版本会导致这种情况。
我们应该使用这样的东西:
"org.slf4j" % "slf4j-log4j12" % "1.7.30" % Test,
"org.slf4j" % "slf4j-api" % "1.7.30" % Test,