gpt4 book ai didi

java - 为什么在使用 slf4j 时排除公共(public)日志记录?

转载 作者:行者123 更新时间:2023-11-30 01:58:07 25 4
gpt4 key购买 nike

我正在构建一个非常简单的应用程序,以便我可以理解 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记录器进行的日志记录都会被slf4j拾取并重定向到logback。

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

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

最佳答案

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

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

为什么您需要两个 Activity 的日志记录实现,需要单独配置,并且必须记录到不同的日志文件?

您不这样做,并且您的应用程序已选择使用 Logback,并选择 JCL 应调用 SLF (jcl-over-slf4j),因此代码是否正确并不重要调用JCL或SLF,日志记录将由Logback完成。

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

关于java - 为什么在使用 slf4j 时排除公共(public)日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53717043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com