今天,尝试使用slf4j + logback的黄金组合,结果发现有点问题,slf4j和logback的最新版本不兼容。当然slf4j是1.6.0-RC0,正式发布时logback应该会跟进发布新的版本吧。
使用的版本如下ivy文件所示:
<
dependency
org
="org.slf4j"
name
="slf4j-api"
rev
="1.6.0-RC0"
conf
="compile -> master"
/>
<
dependency
org
="ch.qos.logback"
name
="logback-classic"
rev
="0.9.20"
conf
="runtime -> master"
/>
<
dependency
org
="ch.qos.logback"
name
="logback-core"
rev
="0.9.20"
conf
="runtime -> master"
/>
slf4j是最新的1.6.0-RC0,logback也是最新的0.9.20。
测试代码如下:
Logger logger
=
LoggerFactory.getLogger(HelloWorld.
class
);
logger.info(
"
Hello World
"
);
//
placeholder
logger.info(
"
test placeholder: param1 = {}, param = {}
"
,
100
,
200
);
运行后日志如下:
08
:
21
:
19.812
[main] INFO test.example1.HelloWorld
-
Hello World
Exception in thread
"
main
"
java.lang.NoSuchMethodError:
org.slf4j.helpers.MessageFormatter.arrayFormat(Ljava
/
lang
/
String;[Ljava
/
lang
/
Object;)
Ljava
/
lang
/
String;
at ch.qos.logback.classic.spi.LoggingEvent.getFormattedMessage(LoggingEvent.java:
288
)
at ch.qos.logback.classic.spi.LoggingEvent.prepareForDeferredProcessing
(LoggingEvent.java:
196
)
at ch.qos.logback.core.OutputStreamAppender.subAppend(OutputStreamAppender.java:
211
)
at ch.qos.logback.core.OutputStreamAppender.append(OutputStreamAppender.java:
108
)
at ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend
(UnsynchronizedAppenderBase.java:
91
)
at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders
(AppenderAttachableImpl.java:
64
)
at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:
275
)
at ch.qos.logback.classic.Logger.callAppenders(Logger.java:
262
)
at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:
465
)
at ch.qos.logback.classic.Logger.filterAndLog_2(Logger.java:
456
)
at ch.qos.logback.classic.Logger.info(Logger.java:
631
)
at test.example1.HelloWorld.main(HelloWorld.java:
14
)
可以看到第一个普通的"logger.info("Hello World");"语句打印正常,但是第二个使用了slf4j的placeholder特性的info语句遭遇异常:类org.slf4j.helpers.MessageFormatter 中没有logback期望调用的一个方法。
猜测是slf4j新的1.6.0-RC0版本对类MessageFormatter 做了调整,而原有调用它的logback 0.9.20版本还没有更新。试着更改ivy设置为:
<
dependency
org
="ch.qos.logback"
name
="logback-classic"
rev
="0.9.20"
conf
="runtime -> *"
/>
让ivy自动将logback 0.9.20的依赖搞定,resolve成功后发现果然0.9.20是使用slf4j的1.5.11版本。运行上面的代码,成功不再报错:
08
:
37
:
00.562
[main] INFO test.example1.HelloWorld
-
Hello World
08
:
37
:
00.578
[main] INFO test.example1.HelloWorld
-
test placeholder: param1
=
100
, param
=
200
看来暂时还不能使用slf4j 1.6.0-RC0 + logback 0.9.20的组合了,看了一下logback的网站,没有发现新的测试版本,只能退回到slf4j 1.5.11 + logback 0.9.20。等slf4j 1.6.0 release之后,logback 应该会发布新的版本吧。小小的鄙视一下logback,作为严重依赖slf4j的项目,居然不及时跟进。我测试过log4j的版本在新的1.6.0-RC0就没有出现类似问题。
分享到:
相关推荐
slf4j-api-1.6.0.jar,slf4j-jdk14-1.6.0.jar,slf4j-log4j12-1.6.0-rc0.jar,slf4j-nop-1.6.0.jar,slf4j-simple-1.6.0.jar
在"slf4j-1.6.1"这个版本中,SLF4J提供了各种绑定(binding)以适配不同的日志实现,例如log4j-slf4j-impl.jar用于将SLF4J与Log4j集成,而slf4j-jdk14.jar则用于与Java Util Logging集成。 Logback作为SLF4J的一个...
该压缩包中包含以下内容: 1、jcl-over-slf4j-1.7.21.jar 2、jcl-over-slf4j-1.7.21-sources.jar 3、jul-to-slf4j-1.7.21.jar 4、jul-to-slf4j-1.7.21-sources.jar 5、log4j-over-slf4j-1.7.21.jar 6、log4j-over-...
该压缩包中包含以下内容: 1、jcl-over-slf4j-1.7.21.jar 2、jcl-over-slf4j-1.7.21-sources.jar 3、jul-to-slf4j-1.7.21.jar 4、jul-to-slf4j-1.7.21-sources.jar 5、log4j-over-slf4j-1.7.21.jar 6、log4j-over-...
1、jcl-over-slf4j-1.7.21.jar 2、jcl-over-slf4j-1.7.21-sources.jar 3、jul-to-slf4j-1.7.21.jar 4、jul-to-slf4j-1.7.21-sources.jar 5、log4j-over-slf4j-1.7.21.jar 6、log4j-over-slf4j-1.7.21-sources....
赠送jar包:slf4j-api-1.7.30.jar; 赠送原API文档:slf4j-api-1.7.30-javadoc.jar; 赠送源代码:slf4j-api-1.7.30-sources.jar; 赠送Maven依赖信息文件:slf4j-api-1.7.30.pom; 包含翻译后的API文档:slf4j-api-...
开发工具 slf4j-api-1.7.22开发工具 slf4j-api-1.7.22开发工具 slf4j-api-1.7.22开发工具 slf4j-api-1.7.22开发工具 slf4j-api-1.7.22开发工具 slf4j-api-1.7.22开发工具 slf4j-api-1.7.22开发工具 slf4j-api-1.7.22...
赠送jar包:slf4j-api-1.7.26.jar; 赠送原API文档:slf4j-api-1.7.26-javadoc.jar; 赠送源代码:slf4j-api-1.7.26-sources.jar; 赠送Maven依赖信息文件:slf4j-api-1.7.26.pom; 包含翻译后的API文档:slf4j-api-...
标题中的"slf4j-api-1.6.1-slf4j-nop-1.6.1.rar"表明这是一个包含SLF4J API和NOP绑定的日志库的压缩包。描述中提到,解压后会得到两个JAR文件:slf4j-api-1.6.1.jar和slf4j-nop-1.6.1.jar。 **SLF4J API** 1. **...
在`slf4j-api-1.7.25.jar`文件中,包含了SLF4J的所有核心接口和类,如`org.slf4j.Logger`、`org.slf4j.LoggerFactory`和`org.slf4j.Marker`等。这些接口定义了日志记录的基本操作,如`trace()`, `debug()`, `info()`...
赠送jar包:log4j-slf4j-impl-2.12.1.jar; 赠送原API文档:log4j-slf4j-impl-2.12.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.12.1.pom; ...
在"slf4j-1.6.0.zip"压缩包中,可能包含了SLF4J的API库(如slf4j-api-1.6.0.jar)和一个或多个绑定器,比如针对Logback的绑定器(slf4j-logback1.x-1.6.0.jar)。开发环境中,我们需要根据实际使用的日志框架选择...
本文将深入探讨“日志4j(Log4j)、SLF4J(Simple Logging Facade for Java)和logback 1.3.0”这三者之间的关系以及它们在Java应用中的作用。 首先,Log4j是Apache软件基金会开发的一个流行的日志记录框架,它允许...
赠送jar包:log4j-slf4j-impl-2.12.1.jar; 赠送原API文档:log4j-slf4j-impl-2.12.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.12.1.pom; ...
"slf4j-api-1.7.12.jar"则是SLF4J的核心API库,包含了所有SLF4J的日志记录方法和接口,但不包含任何实际的日志实现。 在Java项目中,通常需要同时包含这两个JAR文件:slf4j-api-1.7.12.jar(提供接口)和slf4j-log4...
压缩包内的文件名称列表中,"slf4j-api-1.5.8.jar"是SLF4J API的1.5.8版本,而"slf4j-nop-1.5.8.jar"则是SLF4J NOP实现的同版本。这两个JAR文件通常会一起使用,API JAR提供日志接口,NOP JAR作为默认的日志实现。...
赠送jar包:log4j-over-slf4j-1.7.33.jar; 赠送原API文档:log4j-over-slf4j-1.7.33-javadoc.jar; 赠送源代码:log4j-over-slf4j-1.7.33-sources.jar; 赠送Maven依赖信息文件:log4j-over-slf4j-1.7.33.pom; ...
标签"slf4j-api-1.7.30"是对这个资源的标识,表明它是SLF4J API的特定版本,方便在项目管理和依赖管理工具(如Maven或Gradle)中引用。 压缩包子文件列表中,除了"slf4j-api-1.7.30.jar"之外,还有一个名为"新建...
总之,`slf4j-api-1.7.7.jar`是SLF4J API的一个版本,它为开发者提供了一个灵活的日志接口,允许在不同的日志框架之间轻松切换,提高了代码的可维护性和部署的便捷性。在实际使用时,需要结合具体的日志实现库,才能...
https://github.com/tomcat-slf4j-logback/tomcat-slf4j-logback上的jar与源码,网络不好,下载不易,特此分享。包括: logback-1.2.3.zip Tomcat7.0.82\tomcat-juli-7.0.82-slf4j-1.7.25-logback-1.2.3.zip Tomcat...