java - 日志框架不兼容性

  显示原文与译文双语对照的内容

我正在构建一个小的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)

我已经在一些jar上尝试了更高的verision数,并且挖掘了API文档等等。 但我无法找到并解决这个问题。

请帮忙?

尽管logback被认为是"策略"日志框架,但我还是有一些自由的日志机制。 我希望使用logback或者 Log4J,但我肯定想将旧的项目日志合并到任何"新建"日志框架中,通过一个共同的配置。

时间: 原作者:

SLF4J 1.5.11和 1.6.0版本不兼容( 参见兼容性报告 。),因为参数列表 org.slf4j.spi.LocationAwareLogger.log 方法已经更改为( 添加了对象 [] 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版本的兼容性报告。

原作者:

只是为了帮助那些类似的情况。

这可能是由于一个依赖库偶然捆绑了一个旧版本的slf4j 。 在我的例子中,它是 tika-0.8. 参见 https://issues.apache.org/jira/browse/TIKA-556 web

周围的工作不包括组件,然后手动依赖于正确或者修补的版本。

比如,


 <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>

原作者:
...