当 SLF4J 位于 Maven pom.xml 文件中时,为什么会出现“No SLF4J”provider found 错误?

问题描述 投票:0回答:2

我目前在尝试运行 Spring Java 程序时遇到以下错误。

SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.
SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier.
SLF4J: Ignoring binding found at [jar:file:/C:/Users/user/.m2/repository/ch/qos/logback/logback-classic/1.2.11/logback-classic-1.2.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Ignoring binding found at [jar:file:/C:/Users/user/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.19.0/log4j-slf4j-impl-2.19.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See https://www.slf4j.org/codes.html#ignoredBindings for an explanation.

这是 pom.xml 文件中具有 SLF4J 和 Log4J 依赖项的部分。该部分已在之前的项目中发挥过作用。

<dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>2.0.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.19.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.19.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.19.0</version>
        </dependency>

我没有任何针对 slf4j-api 版本 1..x 或更早版本的组件。这个错误信息似乎既说我没有SLF4J,又说我版本不对。

如果有任何关于如何解决此问题的想法,我将不胜感激。谢谢!

我尝试在 pom.xml 文件中使用不同的依赖项,但最终这些依赖项在以前的程序中有效。我还尝试查看可能也使用 SLF4J 的依赖项并从中排除 SLF4J,但我仍然收到错误消息。我已经尝试过其他类似问题的解决方案,但不断收到相同的错误。

java maven log4j pom.xml slf4j
2个回答
5
投票

基于本文档

由于 SLF4J 绑定的兼容性中断,从版本 2.19.0 开始,提供了两个 SLF4J 到 Log4j 适配器。

  1. log4j-slf4j-impl
    应与 SLF4J 1.7.x 版本或更早版本一起使用。
  2. log4j-slf4j2-impl
    应与 SLF4J 2.0.x 版本或更高版本一起使用。

利用 Java 模块系统的应用程序应使用 SLF4J 2.0.x 和 log4j-slf4j2-impl。

所以最简单的方法(如果您需要 SLF4J 2)是使用

<artifactId>log4j-slf4j2-impl</artifactId>
。您可以做的另一件事是恢复到
slf4j-api
1.7.x.

其他注意事项:

  • SLF4J 日志显示

    logback-classic
    也存在于依赖关系树中。您需要选择
    logback-classic
    或 log4j 绑定。在您的项目上运行
    mvn dependency:tree
    以查找添加
    logback-classic
    的位置。

  • 如果你想保留

    logback-classic
    ,那么与上面提到的一样,你需要使用与SLF4J 2兼容的
    logback-classic


0
投票

我正在使用 Gradle。添加此依赖项有效

implementation 'org.apache.logging.log4j:log4j-slf4j2-impl:2.20.0'
© www.soinside.com 2019 - 2024. All rights reserved.