[英]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.