Java slf4j/logback/jcl-over-slf4j-即使jcl-over-slf4j不在依赖项中,仍然路由到logback?
在试验日志依赖关系时,我遇到了以下情况:Java slf4j/logback/jcl-over-slf4j-即使jcl-over-slf4j不在依赖项中,仍然路由到logback?,java,spring,maven,slf4j,apache-commons-logging,Java,Spring,Maven,Slf4j,Apache Commons Logging,在试验日志依赖关系时,我遇到了以下情况: <repositories> <repository> <id>version99</id> <url>http://version99.qos.ch/</url> </repository> </repositories> <dependencyManagement> <depend
<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>
版本99
http://version99.qos.ch/
公用记录
公用记录
99空
公用记录
公用记录
org.slf4j
slf4j api
1.7.25
回写
回溯堆芯
1.2.3
回写
回归经典
1.2.3
需要注意的是,jcl-over-slf4j
的依赖关系被注释掉了。令我惊讶的是,来自Spring的日志仍然由Logback处理。这怎么可能?jcl和slf4j之间没有有效的网桥,所以我们怎么能以Logback结束呢
我证实:
- 类路径中只有
commons-logging-99-empty.jar
中没有提到任何mvn依赖项:tree-Dverbose-Dincludes=org.slf4j
jcl-over-slf4j
commons日志记录中的类出现NoClassDefFoundError
请注意,我无意在注释中将该依赖项留给jcl-over-slf4j
。我只是想知道发生了什么。我以为我终于理解了这些日志依赖关系,但显然,在实践中,它的行为与我预期的完全不同。您使用的是Spring 5吗
在Spring5中,引入了另一个所谓的桥:SpringJCL
。有关开发说明,请参见
因此,在您的例子中,虽然jcl-over-slf4j
不再在类路径中,但是spring-jcl
仍然在类路径中,并且它正在做完全相同的事情(commons-logging
路由到log4j
或java.util.logging
,具体取决于类路径上的内容)asjcl-over-slf4j
如果您同时拥有jcl-over-slf4j
和spring-jcl
,那么谁获胜基本上没有定义。没关系,因为他们都做同样的事。但是,您有重叠的类,因此这可能会在其他地方影响您
这是最好的日志记录方式。登录Java=PITA。只是开玩笑,很可爱。