Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java slf4j/logback/jcl-over-slf4j-即使jcl-over-slf4j不在依赖项中,仍然路由到logback?_Java_Spring_Maven_Slf4j_Apache Commons Logging - Fatal编程技术网

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
,具体取决于类路径上的内容)as
jcl-over-slf4j

如果您同时拥有
jcl-over-slf4j
spring-jcl
,那么谁获胜基本上没有定义。没关系,因为他们都做同样的事。但是,您有重叠的类,因此这可能会在其他地方影响您


这是最好的日志记录方式。

登录Java=PITA。只是开玩笑,很可爱。