slf4j默认使用commons-logging实现吗?

时间:2013-02-21 23:10:39

标签: java logging slf4j apache-commons-logging

我过去只与log4j合作过。现在我正在寻找一个新项目,并注意到它使用slf4j 1.7.2。据我所知,它只是一个API规范,它为符合它的各种实现提供了简化的接口(AKA外观),例如java.util.logging, log4j and logback。但是,我注意到API网站上的列表中没有提到commons-logging,但是,它的jar在这个应用程序的类路径中。当我从类路径中删除它以检查它是否是使用的实现时,我确认它确实是:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

commons-logging确实是slf4j的默认实现?因为他们的文件说:

如果在类路径上找不到绑定,则SLF4J将默认为无操作实现。

在上面的链接页面。即使我在类路径中有slf4j-nop-1.7.2.jar,我猜测上面提到的默认实现是,如果公共不在类路径中,我仍然会得到org/apache/commons/logging/LogFactory的异常,所以我是困惑。

澄清澄清。

1 个答案:

答案 0 :(得分:0)

您需要在类路径上组合绑定jar和日志记录实现(在本例中为JCL)。

Binding with a logging framework at deployment time

commons-logging不是默认值,但是如果你的类路径上有slf4j-jcl-1.7.2.jar,它会尝试使用它。因此,如果您从路径中删除JCL,它会抱怨它无法找到类。

slf4j-nop-1.7.2.jar是无操作的“SLF4J绑定”jar,本身并不是一个实现。