- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在尝试日志依赖时,我遇到了以下情况:
<repositories>
<repository>
<id>version99</id>
<url>http://version99.qos.ch/</url>
</repository>
</repositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>99-empty</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!--<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.25</version>
</dependency>-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
重要的是要注意对 jcl-over-slf4j
的依赖被注释掉了。令我惊讶的是,来自 Spring 的日志仍然由 Logback 处理。这怎么可能? jcl 和 slf4j 之间没有激活的桥接,那么我们怎么会在 Logback 中结束呢?
我证实:
commons-logging-99-empty.jar
在类路径中。mvn dependency:tree -Dverbose -Dincludes=org.slf4j
jcl-over-slf4j
我真的很困惑。我希望 NoClassDefFoundError
来自 commons-logging
的类。
请注意,我无意在评论中将这种依赖关系留给 jcl-over-slf4j
。我只想了解发生了什么。我以为我终于理解了这些日志依赖关系,但显然,在实践中,它的行为与我预期的完全不同。
最佳答案
您使用的是 Spring 5 吗?
在Spring 5中,又引入了一个所谓的bridge:spring-jcl
。参见 https://jira.spring.io/browse/SPR-14512用于开发说明。
所以在你的情况下,虽然 jcl-over-slf4j
不再在类路径中,但 spring-jcl
仍然存在并且它正在做 完全相同的事情事情(还有更多,因为它还将 commons-logging
路由到 log4j
或 java.util.logging
,具体取决于什么在你的类路径上)作为 jcl-over-slf4j
。
如果你同时拥有jcl-over-slf4j
和spring-jcl
,那么谁胜出基本上是不确定的。没关系,因为他们都做同样的事情。但是,您有重叠的类,因此这可能会影响到您的其他地方。
这是最好的记录恐怖。
关于java - slf4j/logback/jcl-over-slf4j - 即使 jcl-over-slf4j 不在依赖项中,仍然路由到 logback?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47060417/
我是一名优秀的程序员,十分优秀!