小工具知识网

当前位置: 首页 > 行业知识 > Spring Boot 2.x 将 logback 1.2.x 升级至 1.3.x

行业知识

Spring Boot 2.x 将 logback 1.2.x 升级至 1.3.x

2026-11-01 21:17:57 来源:互联网转载

场景

安全部门针对代码进行漏洞扫描时,发现 logback-core 和 logback-classic 都属于 1.2.x 版本,这个版本存在 CVE 漏洞,并且建议升级到 1.3.x 版本。

问题

将两个包直接升级到 1.3.x 版本时,Spring Boot Web 服务启动直接出现错误

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinderat 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:238)at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:220)at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)

原因

org.slf4j.impl.StaticLoggerBinder 这个类在 1.2.x 中由 logback 自行实现,在1.3.x 版本中,这个类已经消失,

所以直接升级logback的包看起来并不可行,因为spring boot的代码中对实用到了1.2.x中的类。

解决

按照上面所说的原因,直接升级spring boot到新版本就可以支持 logback 1.3.x ,

但是遗憾的是 spring boot 需要版本在 3.x.x 之上才支持 logback 1.3.x ,并且使用 spring boot 3 需要 jdk 17的支持,

这就麻烦了,如此大版本的升级,对于系统的影响,可能无法预知,是否存在不升级版本还能兼容使用 logback 1.3.x 的方法。

最终方案

经过尝试,我使用了下面的步骤,在不升级 spring boot 版本的情况下,成功使用 logback 1.3.x。

1. 单独升级logback版本, pom.xml

    org.slf4j    slf4j-api    2.0.4    org.slf4j    log4j-over-slf4j    2.0.4    org.slf4j    jul-to-slf4j    2.0.4    ch.qos.logback    logback-core    1.3.0    ch.qos.logback    logback-classic    1.3.0

2. 禁用spring boot自身对日志的适配

@SpringBootApplicationpublic class Application {    public static void main(String[] args) {        System.setProperty("org.springframework.boot.logging.LoggingSystem", "none");        SpringApplication.run(Application.class, args);    }}

3. 在resources根目录下增加logback.xml文件

这一步根据自己的需求配置饥渴。

                                            ....               .....               ...            ....            ....            ....            ....                                                        

4. 完毕

这时候启动项目即可正常运行。

原因说明:

slf4j-api 1.8之后的版本不再使用静态绑定,意味着不再需要StaticLoggerBinder,使用的是ServiceLoader机制,

新版本的 logback 自然为了适配,删除了 StaticLoggerBinder,使用 ServiceLoader 机制,

因此禁用了 spring boot 自身的日志适配,引入高版本logback后,logback自身通过 ServiceLoader 即引入项目中正常使用

PS

本文参考了:

  1. springboot 版本1.5.4 版本低 logback 升级1.3以上项目启动冲突

  2. logback更新到1.3版本tomcat无法启动问题解决

上一篇:揭秘GIS系统源码奥秘,深度解析地理信息系统核心机制

下一篇:手机页面怎么增加?