在Spring Boot 1.5.8应用程序中将Logback从1.1.11升级到1.3.0-alpha4

3

Spring Boot 1.5.8默认提供Logback-1.1.11版本。我试图将Logback版本从1.1.11升级到1.3.0-alpha4,并在pom中添加了以下两个属性。

<slf4j.version>1.8.0-beta4</slf4j.version>
<logback.version>1.3.0-alpha4</logback.version>

当我尝试运行这个应用程序时,会出现以下异常。
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
    at org.springframework.boot.logging.logback.LogbackLoggingSystem.getLoggerContext(LogbackLoggingSystem.java:273)
    at org.springframework.boot.logging.logback.LogbackLoggingSystem.beforeInitialize(LogbackLoggingSystem.java:98)
    at org.springframework.boot.logging.LoggingApplicationListener.onApplicationStartingEvent(LoggingApplicationListener.java:230)
    at org.springframework.boot.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:209)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:122)
    at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:69)
    at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:48)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:292)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
    at com.anthem.acmp.service.UMIDALServiceApplication.main(UMIDALServiceApplication.java:25)
Caused by: java.lang.ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 14 more

我发现logback-classic-1.1.11.jar包含了org.slf4j.impl这个包,其中有一个叫StaticLoggerBinder的类,在logback-classic-1.3.0-alpha4中并没有这个类,这导致了这个问题。


1
由于依赖关系已经提到,这些软件是测试版和开发版,通常不适用于生产。Spring Boot 是基于 SLF4J 1.7 构建的,而不是 1.8。因此,您可能会遇到兼容性问题。 - M. Deinum
2个回答

2
Logback 1.3 和 SLF4J 1.8 相比它们的 1.2 和 1.7 版本,包含了破坏性的 API 更改。在撰写本文时,Spring Boot 不兼容新的 API。有一个 问题 正在跟踪对新版本的支持。在项目稳定且不再处于 alpha 或 beta 阶段之前,这个问题不会得到解决。

1
当我将StaticLoggerBinder从版本1.2复制到我的项目中时,我能够使用logback 1.3.0-alpha4。(在新包org.slf4j.impl中创建一个新的StaticLoggerBinder.java并粘贴整个文件。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接