记录框架不兼容


109

我正在构建一个小型Java应用程序,并希望使用logback进行日志记录。

我的应用程序依赖于一个较旧的项目,该项目通过

org.apache.commons | com.springsource.org.apache.commons.logging | 1.1.1

...所以我的计划是使用

org.slf4j | jcl-over-slf4j | 1.5.6

...将JCL日志记录重定向到

org.slf4j | slf4j-api | 1.6.0

...最终

ch.qos.logback | logback-classic | 0.9.22
ch.qos.logback | logback-core | 0.9.22

因此我的应用可以通过其slf4j API通过logback登录,而旧的库代码可以通过重定向登录到同一位置。

,这导致

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.info(SLF4JLocationAwareLog.java:141)

我已经尝试过在其中一些罐子中使用更高或更低的版本号,并且还通过API文档等进行了挖掘...但是我无法找到并解决问题。

请帮助?

尽管logback被认为是“战略”日志记录框架,但是我在最终使用哪种日志记录机制方面还有一些余地。不过,我希望使用logback或log4j,并且我绝对希望通过通用配置将旧项目的日志记录合并到最终成为“新”日志记录框架的内容中。

Answers:


111

您正在将jcl桥的1.5.6版本与slf4j-api的1.6.0版本混合在一起。由于1.6.0中的一些更改,因此无法使用。两者使用相同的版本,即1.6.1(最新版本)。我一直都在使用jcl-over-slf4j桥,并且运行良好。


2
当然,那立刻起作用了;非常感谢你!我没有使用过1.6.1的罐子,因为它们似乎不可用。我对m2eclipse感到非常恼火,它声称是向我展示了所有可用版本,但是却神秘地删除了其中的很多版本。
卡尔·斯莫特里奇

1
只是为了其他关注的人:我在依赖关系图中以红色箭头结尾,因为即使最新的logback-core都坚持使用slf4j-1.6.0。直到版本中所有红色箭头都消失了为止,版本才花了一些时间进行修改,但是现在它既可以使用,又可以使用所有蓝色箭头。
卡尔·斯莫特里奇

1
我到底该怎么做。
user1721803 2014年

谢谢...使用'jcl-over-slf4j'保存了我的一天。
塔里克·纳西姆

41

SLF4J 1.5.11和1.6.0版本不兼容(请参阅兼容性报告),因为org.slf4j.spi.LocationAwareLogger.log方法已更改(添加了Object [] p5):

SLF4J 1.5.11:

LocationAwareLogger.log ( org.slf4j.Marker p1, String p2, int p3,
                          String p4, Throwable p5 )

SLF4J 1.6.0:

LocationAwareLogger.log ( org.slf4j.Marker p1, String p2, int p3,
                          String p4, Object[] p5, Throwable p6 )

请参阅本页上其他SLF4J版本的兼容性报告。

您可以通过japi-compliance-checker工具生成此类报告。

在此处输入图片说明


23

只是为了帮助那些处境相似的人...

当从属库意外捆绑了旧版本的slf4j时,可能会导致这种情况。就我而言,是tika-0.8。参见https://issues.apache.org/jira/browse/TIKA-556

解决方法是排除该组件,然后手动依赖正确或修补的版本。

例如。

    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-parsers</artifactId>
        <version>0.8</version>
        <exclusions>
            <exclusion>
                <!-- NOTE: Version 4.2 has bundled slf4j -->
                <groupId>edu.ucar</groupId>
                <artifactId>netcdf</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <!-- Patched version 4.2-min does not bundle slf4j -->
        <groupId>edu.ucar</groupId>
        <artifactId>netcdf</artifactId>
        <version>4.2-min</version>
    </dependency>

谢谢!当尝试将Jackrabbit 2.2.5与SLF4J 1.6.1和Logback 0.9.28一起使用时,我受到了打击!
Hendy Irawan

谢谢。我在这里链接到您的答案:spring-java-ee.blogspot.com/2011/04/…–
Hendy Irawan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.