当前位置: 首页 > news >正文

在jdk8的spring-boot-2.7.x项目中集成logback-1.3.x

1、当前软件选型框架

  1. 项目使用JDK为1.8
  2. spring-boot版本为2.7.x
  3. spring framework版本为5.3.x
  4. 日志门面slf4j-1.7.x
  5. 日志实现logback-1.2.x

2、需要使用高版本的logback-1.3.x的原因

  1. 想要使用高版本的特性
  2. 漏洞修复

3、直接将logback升级1.3.x存在问题

原因:这里面存在严重的版本依赖关系

3.1 版本依赖关系

在 jdk-1.8的环境下,logback最高可以使用1.3.x,但要求slf4j的版本为 2.0.x
而支持slf4j-2.0.x的spring-boot版本为3.5.x
但在jdk-1.8的环境下,spring-boot版本最高只能使用2.7.x,spring-boot-3.5.x需要jdk17
综上:
各软件在JDK1.8的环境下配套关系为:
spring-boot-2.7.x + spring-framework-5.3.x + slf4j-1.7.x + logback-1.2.x

3.2 那jdk-1.8的spring-boot项目怎么才能使用logback-1.3.x

整体思路就是使用logback的原生能力,让logback框架自己来加载日志配置,不要让spring来加载
因为问题出在spring-2.7.x未适配slf4j-2.0.x,故不让spring加载日志框架就对了

解决方案:

  1. 日志框架搭配:slf4j-2.0.x + logback-1.3.x
  2. 在整个系统的启动入口显示声明
	// 先去除spring加载日志系统System.setProperty("org.springframework.boot.logging.LoggingSystem", "none") // 再启动spring框架SpringApplication app = new SpringApplication(Application.class);
  1. 将logback-spring.xml更名为logback.xml
  2. 将logback.xml中与spring相关的配置去掉,使用logback的原生能力,比如springProperty,springProfile等功能不能再使用
  3. 可以去除在依赖引用中去除spring-boot-starter-logging
  4. 可以将在spring配置文件中与日志有关的配置去掉

3.3 如何查看版本依赖关系

  1. spring项目
    1). 进入spring官网 -> Projects -> sub projects(如spring boot) -> LEARN -> 选择对应的版本-> Reference Doc. -> System Requirements
    2). 根据文章内容查看对应版本的依赖关系
    3). 常用的几个项目的首页,可在首页上直接点击System Requirements 查看,也可点击左上角的切换其它版本或者切换其它项目
    spring-boot项目
    spring framework项目
    spring ai 项目

  2. logback项目
    logback-news 查看版本对应关系
    logback-download 有简单的版本关系说明
    logback-config 查看xml的配置规则 文章入口: logback-documentation 点击: The logback manual -> Ch3: Configuration

  3. slf4j项目
    slf4j-news 版本关系说明
    slf4j-manual 使用手册

4、其它文章参考

spring-boot的github社区关于升级的讨论
SpringBoot2.7 霸王硬上弓 Logback1.3 → 不甜但解渴
logback1.3.x配置详解与实践
SLF4J2.0.x与Logback1.3.x的绑定变动还是很大的,不要乱点鸳鸯谱

http://www.xdnf.cn/news/1383553.html

相关文章:

  • 通过代码认识 CNN:用 PyTorch 实现卷积神经网络识别手写数字
  • Maven 项目单元测试实战指南:从环境搭建到问题排查全解析
  • 使用astah制作专业状态图及C/C++实现解析
  • Docker 详解+示例
  • 进程组 会话 作业控制 守护进程
  • 【Canvas与盾牌】“靡不有初,鲜克有终”黄竖条盾牌
  • Redis 哨兵(Sentinel)全面解析
  • 海康相机开发---设备登录
  • Subdev与Media子系统的数据结构
  • redis单哨兵模式
  • 把 AI 塞进「智能水杯」——基于声学指纹的零样本水质检测杯
  • open webui源码分析11-四个特征之记忆
  • GD32VW553-IOT OLED移植
  • Intern-S1-mini模型结构
  • Python训练营打卡 DAY 50 预训练模型+CBAM模块
  • DQN(深度Q网络):深度强化学习的里程碑式突破
  • 【LeetCode每日一题】160.相交链表 206. 反转链表
  • 在Xcode中查看设备日志的完整指南
  • 消息队列核心问题解决方案:从丢失到重复消费的全方位保障
  • Windows 11 中 PowerShell 与 CMD 的深度对比:从定位到实战
  • Python DELL Logo
  • LCEDA电气规则
  • 整体设计 修订 之1 三“先”之“基” 与范畴重构:康德先验哲学的批判性程序化实现
  • MapStruct用法和实践
  • Vibe Coding到底是什么:什么是 Vibe Coding?AI编程?
  • 深度学习----卷积神经网络实现数字识别
  • 从0开始学习Java+AI知识点总结-27.web实战(Maven高级)
  • 漫谈《数字图像处理》之区域生长和区域分离聚合
  • CDN 临时下载链接
  • OpenCV 图像操作进阶:像素、边界与融合技术