NoClassDefFoundError:org/slf4j/impl/StaticLoggerBinder(使用 SLF4J 和 Logback)

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

不知从何而来,我收到了错误消息:找不到类 StaticLoggerBinder。 我猜这与 Spring-Boot API 有关。有什么解决办法吗?

pom.xml:

      <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>2.5.5</version>
            </dependency>
        <!-- json request -->
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20210307</version>
        </dependency>

        <!-- Log -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>2.0.7</version>
        </dependency>
        <!-- logger -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.4.8</version>
        </dependency>

logback.xml:

<configuration>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/reportsystem.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/reportsystem.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="CUSTOM" class="de.netzmelden.reportsystem.logging.CustomConsoleAppender">
    
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{1} - %msg%n</pattern>
        </encoder>
    </appender>


    <root level="info">
        <appender-ref ref="FILE"/>
        <appender-ref ref="CUSTOM"/>
    </root>

</configuration>

例外:

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
    at org.springframework.boot.logging.logback.LogbackLoggingSystem.getLoggerContext(LogbackLoggingSystem.java:293)
    at org.springframework.boot.logging.logback.LogbackLoggingSystem.beforeInitialize(LogbackLoggingSystem.java:118)
    at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationStartingEvent(LoggingApplicationListener.java:232)
    at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:213)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131)
    at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:76)
    at org.springframework.boot.SpringApplicationRunListeners.lambda$starting$0(SpringApplicationRunListeners.java:53)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
    at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:117)
    at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:53)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:329)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332)
    at de.netzmelden.reportsystem.ReportSystem.main(ReportSystem.java:72)
Caused by: java.lang.ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 17 more

我尝试过使用旧版本的 slf4j-api 和 logback-classic,但没有成功。

问题是为什么我的程序需要 StaticLoggerBinder 并在我使用不应该关心它的最新 slf4j-api 和 logback-classic 版本时抛出异常?

任何有关如何解决问题的建议将不胜感激!

java logback slf4j
1个回答
0
投票

Spring Boot 2.5.5 取决于 logback 1.2.x 和 SLF4J 2.x

SLF4J 实现在 1.x 和 2.x 之间发生了显着变化(因此 logback 1.2.x 与 1.3.x/1.4.x),因此某些用法不再兼容。通常不再可以使用

StaticLoggerBinder

与 SLF4J 2.x 和 logback 1.3.x/1.4.x 兼容的 Spring Boot 第一个版本是 3.0.0

您需要继续使用 logback 1.2.x 和 SLF4J 1.x,或者将 Spring Boot 升级到 3.x。 我显然会推荐后者。

© www.soinside.com 2019 - 2024. All rights reserved.