Log4j2/slf4j - 是否应该从类路径中删除 commons-logging.jar?

Jes*_*y56 1 java log4j slf4j maven

我的日志依赖项目前如下所示:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-bom</artifactId>
            <version>2.9.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

<dependencies>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

我注意到commons-logging.jar由于某种原因它仍然在我的类路径中。我应该排除它还是不会引起任何问题?

到目前为止我没有注意到任何问题,但我仍然想知道那个罐子是否仍然会以某种方式引起问题。

Kay*_*man 5

有使用的依赖项commons-logging。如果它不存在,您将NoClassDefFoundErrors在他们尝试登录时收到。如果有可能让这些人甚至不尝试使用依赖项,那就不会有问题。但这不太可能。

但是,如果他们使用commons-logging而你正在使用SLF4J,那就有问题了。他们登录在错误的位置(从您的角度来看)。这就是伐木桥发挥作用的地方。它们实现不同日志记录框架的公共 API,但将日志记录重定向到您正在使用的内容。

因为SLF4J几个桥(双向),所以commons-logging您不是引入 ,而是引入jcl-over-slf4j。库会认为他们正在使用commons-logging,而实际上它们正在使用SLF4J(然后使用 Logback 等实际的日志记录实现)。

容易吧?;)