使用 Logback 的最佳实践:`logback.xml` 与 `logback-spring.xml` 的区别与用法

在开发 Spring Boot 项目时,日志是调试和监控的重要工具。Spring Boot 默认支持 Logback 作为日志系统,并提供了 logback.xmllogback-spring.xml 两种配置方式。这篇文章将详细介绍这两者的区别、各自的优缺点以及最佳实践。


目录
      • 一、什么是 Logback?为什么选择它?
      • 二、`logback.xml` 与 `logback-spring.xml` 有什么区别?
        • 1. Spring Boot 集成支持
        • 2. 属性注入支持
        • 3. `` 标签支持
        • 4. 自动重启与热加载支持
        • 5. 加载优先级
      • 三、什么时候使用 `logback-spring.xml` 或 `logback.xml`
        • 使用 `logback-spring.xml` 的场景
        • 使用 `logback.xml` 的场景
      • 四、最佳实践:如何使用 `logback-spring.xml` 设置多环境日志路径
        • 1. 在 `application.yml` 中定义日志路径
        • 2. 在 `logback-spring.xml` 中使用日志路径
        • 3. 启动不同环境
      • 五、总结
一、什么是 Logback?为什么选择它?

Logback 是 Java 应用的流行日志框架,以其高性能和丰富的功能在企业级项目中广泛应用。Logback 主要支持控制台和文件日志输出,支持文件滚动(按时间或大小分割日志),并支持自定义日志格式,帮助开发者有效记录和管理日志。


二、logback.xmllogback-spring.xml 有什么区别?

在 Spring Boot 项目中,可以使用 logback.xmllogback-spring.xml 文件来配置日志输出。但这两者虽然都属于 Logback 配置文件,却有不同的用法和特性:

1. Spring Boot 集成支持
  • logback-spring.xml 是专门为 Spring Boot 提供的日志配置文件,允许使用 Spring Boot 特有的功能,比如 Spring 配置的属性注入、基于 Profile 的配置切换等。
  • logback.xml 是标准的 Logback 配置文件,缺少 Spring Boot 特有的集成支持功能,不能直接读取 Spring 配置中的属性。
2. 属性注入支持
  • logback-spring.xml 支持通过 Spring 的 ${} 占位符引入 application.ymlapplication.properties 中定义的属性。例如,日志文件的存储路径可以直接在 logback-spring.xml 中通过 Spring 配置读取:

    # application.yml
    logging:path: /var/log/myapp<!-- logback-spring.xml -->
    <property name="log.path" value="${logging.path}" />
    
  • logback.xml 不支持 Spring 的 ${} 占位符,也无法直接读取 Spring 配置文件中的属性,因此需要手动设置日志路径等参数。

3. <springProfile> 标签支持
  • logback-spring.xml 支持使用 <springProfile> 标签,根据不同的 Spring Profile(如 devprod)动态加载不同的日志配置,方便管理多环境日志。例如:

    <springProfile name="dev"><property name="log.path" value="/dev/logs" />
    </springProfile><springProfile name="prod"><property name="log.path" value="/prod/logs" />
    </springProfile>
    
  • logback.xml 不支持 <springProfile> 标签,无法实现基于 Profile 的日志配置切换。

4. 自动重启与热加载支持
  • logback-spring.xml 支持 Spring Boot DevTools 的热加载,当修改 logback-spring.xml 文件时,Spring Boot 可以自动重启并应用新的日志配置。
  • logback.xml 虽然也支持热加载,但主要依赖 Logback 自身的配置文件监控,Spring Boot 的 DevTools 热加载不会生效。
5. 加载优先级
  • logback-spring.xml 在 Spring Boot 启动时优先加载。Spring Boot 会首先检测 logback-spring.xml,如果存在,则优先使用它作为日志配置文件。
  • logback.xml 作为标准配置文件,如果项目中没有 logback-spring.xml,Spring Boot 才会加载 logback.xml

三、什么时候使用 logback-spring.xmllogback.xml
使用 logback-spring.xml 的场景
  • 需要读取 Spring 配置:如果需要从 application.ymlapplication.properties 文件中读取日志配置,比如日志文件路径或日志级别,推荐使用 logback-spring.xml
  • 需要按环境配置日志:使用 <springProfile> 标签可以让不同环境(开发、测试、生产)加载不同的日志配置,适合多环境部署的项目。
  • 需要自动重启和热加载:在开发中,logback-spring.xml 可以支持 Spring Boot DevTools 的热加载功能,修改后立即生效,提高开发效率。
使用 logback.xml 的场景
  • 标准的 Logback 项目:如果项目不是基于 Spring Boot 或者希望使用标准的 Logback 配置文件,使用 logback.xml 即可。
  • 简单的日志配置:如果没有多环境需求,或不需要从 Spring 配置中读取属性,logback.xml 足够满足基本的日志需求。

四、最佳实践:如何使用 logback-spring.xml 设置多环境日志路径

以下是通过 logback-spring.xml 配合 application.yml 设置多环境日志路径的示例:

1. 在 application.yml 中定义日志路径
# application.yml
spring:profiles:active: devlogging:path: /default/logs  # 默认路径---# application-dev.yml
logging:path: /dev/logs---# application-prod.yml
logging:path: /prod/logs
2. 在 logback-spring.xml 中使用日志路径
<!-- logback-spring.xml -->
<configuration><!-- 读取 Spring 配置文件中的日志路径 --><property name="log.path" value="${logging.path}" /><!-- 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 文件输出 --><appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/sys-info.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="info"><appender-ref ref="console" /><appender-ref ref="file_info" /></root>
</configuration>
3. 启动不同环境

使用 spring.profiles.active 参数来切换日志路径:

  • 开发环境启动:

    java -Dspring.profiles.active=dev -jar your-app.jar
    
  • 生产环境启动:

    java -Dspring.profiles.active=prod -jar your-app.jar
    

五、总结
  • logback-spring.xml 是 Spring Boot 项目中的最佳选择,支持 Spring 配置读取、基于环境的配置切换、热加载等功能,适合多环境部署的项目。
  • logback.xml 适用于标准的 Logback 项目,配置更为通用,但缺少 Spring Boot 的一些特性支持。
  • 通过结合 application.ymllogback-spring.xml,可以根据环境设置不同的日志路径,便于日志管理和问题排查。

希望通过这篇文章,你能更好地理解和运用 Logback,提升日志管理效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/893380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

excel实用工具

持续更新… 文章目录 1. 快捷键1.1 求和 2. 命令2.1 查找 vloopup 1. 快捷键 1.1 求和 windows: alt mac : command shift T 2. 命令 2.1 查找 vloopup vlookup 四个入参数 要查找的内容 &#xff08;A2 6xx1&#xff09;查找的备选集 &#xff08;C2:C19&#xff09;…

QModbusTCPClient占用内存持续增长

最近使用QModbusTCPClient通信&#xff0c;需要频繁发送读写请求&#xff0c;发现软件占用内存一直在增减&#xff0c;经过不断咨询和尝试&#xff0c;终于解决了。 1.方案一&#xff08;失败&#xff09; 最开始以为是访问太频繁&#xff0c;导致创建reply的对象比delete re…

adb 命令使用大全

1.adb针对设备 adb devices //查看链接设备 adb -s "设备序号" shell 命令 //选择设备执行 adb connect "ip地址" adb disconnect "ip地址" adb shell screencap -p /sdcard/screenshot.png //截图 adb pull /sdcard/filename …

Linux(Centos 7.6)命令详解:iconv

1.命令作用 将给定文件的编码从一种编码转换为另一种编码(Convert encoding of given files from one encoding to another) 2.命令语法 Usage: iconv [OPTION...] [FILE...] 3.参数详解 OPTION: 输入/输出格式规范: -f, --from-codeNAME&#xff0c;原始文本编码-t, --t…

读《SQL经典实例》学数据库(系列一)

目录 友情提醒第一章、数据库简述1.1&#xff09;数据库简述1.2&#xff09;常见的数据库软件1.3&#xff09;MySQL数据库安装 第二章、SQL语句分类2.1)操作数据仓库/数据表&#xff1a;DDL2.1.1&#xff09;创建数据仓库/数据表2.1.2&#xff09;删除数据仓库/数据表2.1.3&…

【C++】模板(进阶)

本篇我们来介绍更多关于C模板的知识。模板初阶移步至&#xff1a;【C】模板&#xff08;初阶&#xff09; 1.非类型模板参数 1.1 非类型模板参数介绍 模板参数可以是类型形参&#xff0c;也可以是非类型形参。类型形参就是我们目前接触到的一些模板参数。 //类型模板参数 …

算法项目实时推流

1、搭建流媒体服务器 下载mediamtx 2、视频流直推 ffmpeg -stream_loop -1 -i DJI_20250109112715_0002_W.MP4 -r 30 -c:v libx264 -preset ultrafast -f flv rtmp://192.168.100.20:1935/live/test_chengdu1 3、硬件加速 如果硬件支持&#xff0c;可以使用硬件加速编码器&am…

99.12 金融难点通俗解释:毛利率

目录 0. 承前1. 简述2. 比喻&#xff1a;冰淇淋店赚钱2.1 第一步&#xff1a;准备材料2.2 第二步&#xff1a;卖冰淇淋2.3 第三步&#xff1a;计算毛利率 3. 生活中的例子3.1 好的毛利率3.2 一般的毛利率3.3 差的毛利率 4. 小朋友要注意4.1 毛利率高不一定好4.2 毛利率低不一定…

一文学会YOLO系列算法(从V3到11)实现遥感图像目标检测

目录 前言 数据集介绍 数据集转换 YOLO代码的下载 YOLO的配置 1.数据集的配置 2.模型的配置 YOLO11模型的训练 其它版本YOLO的训练 前言 遥感技术的快速发展&#xff0c;特别是在高分辨率遥感图像的获取能力上的显著提升&#xff0c;已经大大拓宽了遥感数据在环境监测…

3.1 Go函数调用过程

在 Go 语言中&#xff0c;函数调用的核心机制依赖于内存的栈区分配和指针操作&#xff0c;理解这一原理有助于掌握函数的执行过程。 1. 内存结构概述 在 Go 程序编译成可执行文件并启动后&#xff0c;操作系统会为其分配进程内存&#xff0c;进程内存主要分为以下区域&#x…

图解Git——分布式Git《Pro Git》

分布式工作流程 Centralized Workflow&#xff08;集中式工作流&#xff09; 所有开发者都与同一个中央仓库同步代码&#xff0c;每个人通过拉取、提交来合作。如果两个开发者同时修改了相同的文件&#xff0c;后一个开发者必须在推送之前合并其他人的更改。 Integration-Mana…

案例分析一

张某&#xff08;10多年IT工作经验&#xff09;应聘一家国企单位&#xff0c;面试官&#xff08;技术副主管&#xff09;面试时问了些无关痛痒的问题&#xff0c;谈到薪资时强调我权限范围内的数额就那么多&#xff0c;再多就需要走申请流程进行操作了。 没几天入职后&#xf…

【高阶数据结构】布隆过滤器(BloomFilter)

1. 概念 1.1 背景引入 背景&#xff1a;在计算机软件中&#xff0c;一个常见的需求就是 在一个集合中查找一个元素是否存在 &#xff0c;比如&#xff1a;1. Word 等打字软件需要判断用户键入的单词是否在字典中存在 2. 浏览器等网络爬虫程序需要保存一个列表来记录已经遍历过…

【json_object】mysql中json_object函数过长,显示不全

问题&#xff1a;json只显示部分 解决&#xff1a; SET GLOBAL group_concat_max_len 1000000; -- 设置为1MB&#xff0c;根据需要调整如果当前在navicat上修改&#xff0c;只有效本次连接和后续会话&#xff0c;重新连接还是会恢复默认值1024 在my.ini配置文件中新增或者修…

计算机网络 (52)秘钥分配

一、重要性 在计算机网络中&#xff0c;密钥分配是密钥管理中的一个核心问题。由于密码算法通常是公开的&#xff0c;因此网络的安全性主要依赖于密钥的安全保护。密钥分配的目的是确保密钥在传输过程中不被窃取或篡改&#xff0c;同时确保只有合法的用户才能获得密钥。 二、方…

第35天:安全开发-JavaEE应用原生反序列化重写方法链条分析触发类类加载

时间轴&#xff1a; 序列化与反序列化图解&#xff1a; 演示案例&#xff1a; Java-原生使用-序列化&反序列化 Java-安全问题-重写方法&触发方法 Java-安全问题-可控其他类重写方法 Java-原生使用-序列化&反序列化 1.为什么进行序列化和反序列化&#xff1…

MindAgent:基于大型语言模型的多智能体协作基础设施

2023-09-18 &#xff0c;加州大学洛杉矶分校&#xff08;UCLA&#xff09;、微软研究院、斯坦福大学等机构共同创建的新型基础设施&#xff0c;目的在评估大型语言模型在游戏互动中的规划和协调能力。MindAgent通过CuisineWorld这一新的游戏场景和相关基准&#xff0c;调度多智…

Excel 技巧17 - 如何计算倒计时,并添加该倒计时的数据条(★)

本文讲如何计算倒计时&#xff0c;并添加该倒计时的数据条。 1&#xff0c;如何计算倒计时 这里也要用公式 D3 - TODAY() 显示为下面这个样子的 然后右键该单元格&#xff0c;选 设置单元格格式 然后点 常规 这样就能显示出还书倒计时的日数了。 下拉适用到其他单元格。 2&a…

rocketmq基本架构

简介 Name server 负责broker注册、心跳&#xff0c;路由等功能&#xff0c;类似Kafka的ZKname server节点之间不互相通信&#xff0c;broker需要和所有name server进行通信。扩容name server需要重启broker&#xff0c;不然broker不会和name server建立连接producer和consum…

国产编辑器EverEdit - 大纲视图

1 大纲视图 1.1 应用场景 在编辑较长代码文件时&#xff0c;使用大纲视图可以方便的检视当前文件的变量、函数等信息&#xff0c;方便在不同函数间跳转&#xff0c;对整个文档的全貌了然于胸。   在编辑XML文档时&#xff0c;通过展示XML文件的层次结构、节点布局&#xff0…