5

Spring 文档明确提到 spring 仅依赖于 commons-logging。但是,如果我向 Spring Data MongoDb 添加依赖项,gradle 会添加对 slf4j 的依赖项。

org.springframework.data:spring-data-commons:1.5.1.RELEASE       
+--- org.springframework:spring-core:3.1.4.RELEASE (*)           
+--- org.springframework:spring-beans:3.1.4.RELEASE (*)          
+--- org.slf4j:slf4j-api:1.7.1                                   
\--- org.slf4j:jcl-over-slf4j:1.7.1

这是否意味着如果我使用弹簧数据,我将被迫使用 SLF4j?

4

3 回答 3

3

您可以通过添加到 pom.xml 来禁用 Spring Data 中的 SLF4J 日志记录:

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>${spring-data-jpa.version}</version>
        <!-- Exclude slf4j logging in favor of log4j -->
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>${commons-logging.version}</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
    </dependency>
于 2014-07-22T17:57:39.340 回答
3

是的,我们对 Slf4j API 有编译时依赖性,因为它是 Java 的事实上的标准日志记录 API,并且是所有可用选项中麻烦最少的一个:JUL - 我最好不要在这个上留下一个字(如果您仍然需要被说服,请参阅这个),Commons Logging - 运行时提供程序检测已证明是 PITA

我们还需要 jcl-over-slf4j 提供一个 Commons Logging 实现来满足核心 Spring 框架的 Commons Logging 依赖关系,这是由于遗留原因它必须维护的依赖关系,但如果 Slf4j 可用,则不会首先引入回到过去的日子。

所以,是的。我们正在设置激励措施来做“正确的事情”(tm),阅读:“Java 社区普遍同意的方式”。如果您真的想坚持使用 Commons Logging,只需添加 slf4j-jcl 网桥即可。如果要删除 jcl-over-slf4j 桥,只需排除依赖项即可。

于 2013-05-26T13:41:12.177 回答
2

SLF4J只是一个 Logging Facade,在 Spring 案例中将使用 jcl-over-slf4j 依赖项委托公共日志记录。

如果您希望您的应用程序使用 commons-logging,您可以简单地排除 slf4j 依赖项。

于 2013-05-25T21:31:37.057 回答