繁体   English   中英

为什么在使用slf4j时排除公共日志?

[英]Why exclude commons-logging when using slf4j?

我正在构建一个简单的应用程序,以便可以了解slf4j,桥接库,日志记录实现等。我的应用程序依赖于slf4j,后者将logback用于日志记录实现。 另外,它引入了一个包含commons-logging库的库。

应用程序依赖项:

  dependencies {
    compile project(':library-with-jcl')

    compile group: 'org.slf4j', name: 'jcl-over-slf4j', version: '1.7.25'
    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
    compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
}

库依赖:

dependencies {
  compile group: 'commons-logging', name: 'commons-logging', version: '1.2'
}

当我包括jcl-over-slf4j ,该库将按预期通过JCL输出其日志记录。 当我确实包含jcl-over-slf4j ,则jcl-over-slf4j记录通过JCL记录器进行的任何日志记录,并将其重定向到logback。

我一直在互联网上阅读文章,说如果我的应用程序依赖slf4j和依赖JCL的库,则必须排除commons-logging依赖项。 但是,这似乎没有必要,而且我不明白为什么。 在什么情况下我必须排除JCL依赖关系? 我的示例在此是否太简单而无法暴露潜在的问题?

另外,我没有看到建议,例如,如果我使用log4j网桥,则必须从依赖它的库中排除log4j依赖项。 为什么不? JCL是特例吗?

JCL和SLF都是日志记录的外观,即它们只是抽象化日志记录实现的API。

JUL( java.util.logging )和Logback是日志记录的实现。 默认情况下,JCL将调用JUL,而SLF将调用Logback。

为什么要使用两个活动的日志记录实现,这些实现需要分别配置,并且必须记录到不同的日志文件中?

您没有,并且您的应用程序选择了使用Logback,并且选择了JCL应该调用SLF( jcl-over-slf4j ),因此无论代码是调用JCL还是SLF都无关紧要,日志记录将由的logback。

因此,您需要删除(排除)由库依赖项添加的重复JCL门面,该门面现在由jcl-over-slf4j

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM