【发布时间】:2019-05-12 00:35:27
【问题描述】:
我正在构建一个非常简单的应用程序,以便我可以理解 slf4j、桥接库、日志记录实现等。我的应用程序依赖于使用 logback 进行日志记录实现的 slf4j。此外,它还引入了一个包含 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 记录器进行的记录都会被slf4j 拾取并重定向到logback。
我一直在互联网上阅读文章,说如果我的应用程序依赖于 slf4j 和依赖于 JCL 的库,我必须排除 commons-logging 依赖项。然而,这似乎没有必要,我不明白为什么。在什么情况下我必须排除 JCL 依赖项?我的示例是否过于简单而无法暴露潜在问题?
此外,我没有看到必须排除的建议,例如,如果我使用 log4j 桥,则依赖于它的库中的 log4j 依赖项。为什么不? JCL 是特例吗?
【问题讨论】: