为什么在使用 slf4j 时排除 commons-logging?
Why exclude commons-logging when using slf4j?
我正在构建一个非常简单的应用程序,以便我可以理解 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 输出其日志记录。当我 do 包含 jcl-over-slf4j
时,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
实现。
我正在构建一个非常简单的应用程序,以便我可以理解 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 输出其日志记录。当我 do 包含 jcl-over-slf4j
时,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
实现。