【问题标题】:Failed to instantiate SLF4J LoggerFactory when using slf4j with log4j2将 slf4j 与 log4j2 一起使用时无法实例化 SLF4J LoggerFactory
【发布时间】:2021-02-18 10:35:26
【问题描述】:

我开始使用slf4jlog4j2,但我遇到了如下问题。 我在 pom 文件中有什么问题或缺少什么?

Failed to instantiate SLF4J LoggerFactory

Reported exception:

java.lang.NoClassDefFoundError: org/apache/logging/log4j/spi/AbstractLoggerAdapter

at java.lang.ClassLoader.defineClass1(Native Method)

at java.lang.ClassLoader.defineClass(ClassLoader.java:763)

at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)

at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)

at java.net.URLClassLoader.access$100(URLClassLoader.java:74)

...

我的 pom.xml:

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.30</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.12.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.13.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.13.3</version>
    </dependency>

</dependencies>

我非常简单的代码:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Study {

    static Logger LOGGER = LoggerFactory.getLogger(Study.class);
    public static void main(String... args) {
        LOGGER.info("hello world");
    }
}

【问题讨论】:

  • 故意使用不同版本的2.12.02.13.3
  • 不,版本无所谓
  • 如何构建应用程序以及如何运行它?
  • 我只是使用intelliJ中的run功能来运行main方法(在Class Study中右键运行main())
  • 除非你有一个使用 sl4j 的现有代码库,否则你真的不需要将它用于 log4j2,事实上,如果你这样做了,你就会失去 log4j2 的许多功能。见stackoverflow.com/a/41500347/3284624

标签: java log4j2 slf4j


【解决方案1】:

尝试对一个 groupId 中的所有库使用相同的版本:

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

另外,您可以尝试在不依赖 org.slf4j 的情况下运行。开始前运行mvn clean install

【讨论】:

    【解决方案2】:

    我不知道是什么原因,但如果我使用 2.11.2,它可以工作

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      • 2015-11-28
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多