首页 游戏 软件 资讯 排行榜 专题
首页
编程语言
SpringBoot2.7.x将logback升级到1.3.x以上版本的全过程解析

SpringBoot2.7.x将logback升级到1.3.x以上版本的全过程解析

热心网友
83
转载
2026-04-29

SpringBoot2.7.x将logback升级到1.3.x以上版本的全过程解析

不少开发者在尝试将SpringBoot 2.7.x项目中的Logback升级到1.3.x或更高版本时,都会遇到一个典型的启动报错。这背后的原因其实很明确:SpringBoot 2.7.x默认依赖的是logback-classic-1.2.x及以下版本,而到了1.3.x版本,Logback团队移除了一个关键类org.slf4j.impl.StaticLoggerBinder,这个类恰恰是SpringBoot启动时所依赖的。版本不匹配,冲突自然就来了。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

一、报错原因分析

要彻底搞清楚这个问题,最好的办法就是顺着源代码走一遍。我们以以下版本组合为例:

spring-boot-2.7.18

logback-classic-1.2.11

SpringBoot应用启动时,会触发LoggingApplicationListener.onApplicationEnvironmentPreparedEvent方法。这个方法的核心任务之一,就是获取一个LoggingSystem的实例。这个过程如下图所示:

SpringBoot2.7.x将logback升级到1.3.x以上版本的全过程解析

那么,LoggingSystem实例是如何生成的呢?关键在LoggingSystem.get这个方法里:

SpringBoot2.7.x将logback升级到1.3.x以上版本的全过程解析

这里有个系统属性SYSTEM_PROPERTY,其值为org.springframework.boot.logging.LoggingSystem。它的作用是指定日志系统:

  • 如果这个属性的值是一个LoggingSystem实现类的全限定名(比如org.springframework.boot.logging.logback.LogbackLoggingSystem),SpringBoot就会直接实例化它。
  • 如果值被设为NONE,则会生成一个什么都不做的NoOpLoggingSystem
  • 如果既没指定也不是NONE,SpringBoot就会自动扫描类路径,寻找可用的日志框架并初始化。

拿到LoggingSystem实例后,紧接着就会调用其initialize方法:

SpringBoot2.7.x将logback升级到1.3.x以上版本的全过程解析

这个方法内部会进一步调用initializeSystem

SpringBoot2.7.x将logback升级到1.3.x以上版本的全过程解析

注意这里的CONFIG_PROPERTY,它对应环境变量logging.config,也就是用来指定Logback配置文件路径的。之后,SpringBoot会使用LogbackLoggingSystem.initialize来初始化Logback:

SpringBoot2.7.x将logback升级到1.3.x以上版本的全过程解析

问题就出在getLoggerContext()这个方法里。我们来看它的源代码:

SpringBoot2.7.x将logback升级到1.3.x以上版本的全过程解析

看明白了吗?正是在这里,代码直接引用了StaticLoggerBinder.getSingleton().getLoggerFactory()。而在Logback 1.3.x中,这个StaticLoggerBinder类已经被移除了。所以,当SpringBoot 2.7.x试图用老办法初始化新版本的Logback时,类找不到,报错也就成了必然。

二、解决方案

分析完源码,解决方案就清晰了。核心思路就一句话:绕过SpringBoot的自动初始化,让应用自己来管理Logback的启动。

具体操作分三步:

第一步,关闭SpringBoot的日志系统自动配置。 将系统属性 org.springframework.boot.logging.LoggingSystem 的值设置为 none。这样,SpringBoot在启动时就不会尝试去初始化和绑定Logback了。

第二步,同步升级SLF4J。 将Logback升级到1.3.x时,别忘了它的搭档SLF4J也需要同步升级到1.8.x或更高版本。具体的版本对应关系,可以参考相关文档(如《Ja va:logback-classic与slf4j版本对应关系》)。

第三步,更换配置文件路径的指定方式。 如果你之前是通过环境变量 logging.config 来指定Logback配置文件(如logback.xml)的位置,现在需要改为使用Logback原生支持的 logback.configurationFile 环境变量。原因在下面的源码中一目了然:

SpringBoot2.7.x将logback升级到1.3.x以上版本的全过程解析

(注:上述源码截图来自logback-classic-1.3.15)

其实,这个解决方案在Logback的官网上也有明确说明。下图来自其下载页面:

SpringBoot2.7.x将logback升级到1.3.x以上版本的全过程解析

地址:https://logback.qos.ch/download.html

官网的建议也验证了我们的分析:在Spring Boot等框架中,需要通过设置org.springframework.boot.logging.LoggingSystem=none来禁用其日志系统,并直接使用Logback自身的初始化机制。

三、进一步说明

可能有人会问,为什么一定要换成logback.configurationFile,而不能继续用Spring Boot的logging.config呢?这涉及到Web应用中的初始化顺序问题。

对于部署在Servlet 3.0及以上容器(比如Tomcat)的应用,Logback的初始化通常是由ch.qos.logback.servlet.LogbackServletContainerInitializer这个类来完成的。而Spring Boot自身的初始化则是由org.springframework.web.SpringServletContainerInitializer负责。这两个类都实现了ja vax.servlet.ServletContainerInitializer接口。

关键在于,Servlet容器往往会先执行LogbackServletContainerInitializer。这意味着,在Spring Boot还没来得及插手之前,Logback就已经按照自己的规则初始化完毕了。所以,等到Spring Boot想通过logging.config去配置Logback时,时机已经错过了,配置自然不会生效。

因此,在混合升级的场景下,使用Logback原生支持的logback.configurationFile环境变量来指定配置路径,是确保配置能够被正确加载的唯一可靠方式。

来源:https://www.jb51.net/program/36248647s.htm
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

《洛克王国:世界》隐藏极品精灵蛋获取攻略
游戏攻略
《洛克王国:世界》隐藏极品精灵蛋获取攻略

洛克王国世界隐藏极品精灵蛋获取方法全解析 各位《洛克王国:世界》的训练家们,你是否已经探索了地图上的每一个角落?游戏中其实散布着一些极易被忽略的隐藏宝藏——属性近乎完美的极品精灵蛋。它们潜藏在特定遗迹中,即便完成了主线剧情,许多玩家也可能与之失之交臂。本文将为你悉数揭秘这些稀有精灵蛋的精准位置与获取

热心网友
05.01
cr8.art : AI辅助艺术创作
AI
cr8.art : AI辅助艺术创作

需求人群 首先,艺术创作领域的工作者。无论是绘画、设计,还是数字媒体艺术家,一个能够持续激发灵感的工具总是备受青睐。 上图所示平台,正是为这一群体量身打造的解决方案。 产品特色 那么,它具体能带来哪些不一样的助力?我们不妨拆开来看。 首当其冲的,自然是利用AI技术生成创作灵感。创意枯竭的瓶颈期,谁没

热心网友
05.01
小K电商图-低成本打造优质电商图片
AI
小K电商图-低成本打造优质电商图片

「小K电商图」是什么 简单来说,这是一款商用级的电商AIGC图片工具。它的核心价值,就在于能用极低的成本,帮电商从业者产出高质量的营销图片。对于预算和效率都有要求的团队,这无疑是个值得关注的解决方案。 功能解析 功能设计直击行业痛点,每一项都很有针对性: 无需模特和摄影师:这是成本控制的关键。理论上

热心网友
05.01
《洛克王国:世界》炫彩翼王和龙息帕尔选择推荐
游戏攻略
《洛克王国:世界》炫彩翼王和龙息帕尔选择推荐

洛克王国世界炫彩翼王和龙息帕尔怎么选?平民玩家棱镜球使用指南 许多《洛克王国:世界》的玩家手中仅有一颗珍贵的棱镜球,面对炫彩翼王和炫彩龙息帕尔这两只人气宠物,常常陷入难以抉择的困境。毕竟,棱镜球作为一种稀有的养成资源,获取途径有限,一旦用错便会感到十分可惜。那么,这两只炫彩宠物究竟哪一只更值得你投入

热心网友
05.01
《明日方舟:终末地》洛茜抽取建议
游戏攻略
《明日方舟:终末地》洛茜抽取建议

明日方舟终末地洛茜值得抽吗 全面分析卡池价值与阵容搭配 《明日方舟:终末地》全新六星干员‌洛茜‌,将于‌3月29日12:00‌正式进驻下半段限定卡池【狼珀】特许寻访。这位备受期待的物理 火焰混伤干员,其抽取价值主要取决于玩家现有阵容的构建需求。本文将为你深入解析洛茜的强度定位与适用场景,助你做出最明

热心网友
05.01