使用 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;…

【C++】模板(进阶)

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

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

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

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

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

【高阶数据结构】布隆过滤器(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…

Linux中的基本指令(一)

一、Linux中指令的存在意义 Linux中&#xff0c;通过输入指令来让操作系统执行&#xff0c;以此达到控制操作系统的目的&#xff0c;类似于Windows中的双击&#xff0c;右键新建文件&#xff0c;新建文件夹等 1.补&#xff1a;关于屏幕的几个操作指令 ①清屏指令 clear 回…

2025/1/21 学习Vue的第四天

睡觉。 --------------------------------------------------------------------------------------------------------------------------------- 11.Object.defineProperty 1.在我们之前学习JS的时候&#xff0c;普通得定义一个对象与属性。 <!DOCTYPE html> <h…

Go Map 源码分析(一)

Go语言中的map是通过哈希表实现的&#xff0c;其底层结构和实现机制如下&#xff1a; 一、hash 结构 hmap结构体&#xff1a;是map的头部结构&#xff0c;主要字段及含义如下&#xff1a; count&#xff1a;表示当前哈希表中的元素数量&#xff0c;与len()函数相对应。flags…

Linux-C/C++--深入探究文件 I/O (上)(文件的管理、函数返回错误、exit()、_Exit()、_exit())

经过上一章内容的学习&#xff0c;相信各位读者对 Linux 系统应用编程中的基础文件 I/O 操作有了一定的认识和理解了&#xff0c;能够独立完成一些简单地文件 I/O 编程问题&#xff0c;如果你的工作中仅仅只是涉及到一些简单文件读写操作相关的问题&#xff0c;其实上一章的知识…

【机器学习实战中阶】音乐流派分类-自动化分类不同音乐风格

音乐流派分类 – 自动化分类不同音乐风格 在本教程中,我们将开发一个深度学习项目,用于自动化地从音频文件中分类不同的音乐流派。我们将使用音频文件的频率域和时间域低级特征来分类这些音频文件。 对于这个项目,我们需要一个具有相似大小和相似频率范围的音频曲目数据集…

Walrus Learn to Earn计划正式启动!探索去中心化存储的无限可能

本期 Learn to Earn 活动将带领开发者和区块链爱好者深入探索 Walrus 的技术核心与实际应用&#xff0c;解锁分布式存储的无限可能。参与者不仅能提升技能&#xff0c;还能通过完成任务赢取丰厚奖励&#xff01;&#x1f30a; 什么是 Walrus&#xff1f; 数据主权如今正成为越…

git 常用命令 git archive

git archive 是 Git 中用于创建一个包含指定提交或分支中所有文件的归档文件&#xff08;如 .tar 或 .zip&#xff09;的命令。这个命令非常适合用于分发项目快照、备份代码库或导出特定版本的文件。 git archive --formatzip --outputproject.zip HEAD …

Excel 技巧15 - 在Excel中抠图头像,换背景色(★★)

本文讲了如何在Excel中抠图头像&#xff0c;换背景色。 1&#xff0c;如何在Excel中抠图头像&#xff0c;换背景色 大家都知道在PS中可以很容易抠图头像&#xff0c;换背景色&#xff0c;其实Excel中也可以抠简单的图&#xff0c;换背景色。 ※所用头像图片为百度搜索&#x…