spring3.x 如何让 logback.xml 读取 yml 配置的日志输出位置

spring版本3.x

这个问题一就好比先有鸡或先有蛋的问题 你明明知道先有哪个 但是这个问题你不知道怎么配

一开始确实让人头痛,每次在本地和线上部署的时候还要单独配置一下logback.xml的绝对路径 就很烦人 一旦忘了 那么部署到线上的时候就会将日志的文件夹配到同目录下

原因分析

经官网查询得知 logback.xml的加载顺序早于springboot的application.yml

springBoot的加载顺序为logback.xml -> yml/properties -> logback-spring.xml

? 我直接一个大问号为什么logback.xml和logback-spring.xml顺序不一样

那么

我们先来了解一下logback.xml和logback-spring.xml的区别

  1. logback.xml:这是Logback的标准配置文件,Spring Boot在启动时会加载这个文件。但是,它不支持Spring的Profile特性和高级特性,例如在日志中使用${springProperty}来引用Spring环境中的属性。
  2. logback-spring.xml:这是Spring Boot特有的配置文件,它支持Spring的Profile特性和高级特性。例如,我们可以在这个文件中定义不同的日志配置,然后根据当前的Profile来选择使用哪个配置。此外,我们还可以在日志中使用${springProperty}来引用Spring环境中的属性。

简单理解

如果你的项目没有或者不需要配置spring的日志输出规则,那么logback.xml更适合你,简单好用

如果你的项目像我一样需要根据本地环境和线上环境动态配置日志输出的位置规则等 那么logback-spring.xml更适合你

那么如何解决该问题 配置logback-spring.xml呢 让我们进入正题

很简单

不多废话 上图

logback.xml配置如下

17751725794d7287f0bef5702daccb3.png

yml配置如下

1711682543302.jpg

代码附上

<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logdir"/>
<property name="LOG_HOME" value="${logPath}"/>
logging:
  config: classpath:logback-spring.xml
  file:
    path: logs

springProperty的source属性必须和yml的配置一致

springProperty的name属性必须和property的value一致

这样就可以放心在本地或者线上环境安心的配置日志的输出位置啦

但是这块呢 第一次用logback.xml的童鞋 告知一下log的作用

logs和logs/都表示保存到程序运行目录,在tomcat中为bin目录

/logs表示保存到系统目录

../logs表示保存到程序运行目录的父目录

然后在线上的.sh命令呢正常配置即可

以上就是今天碰到的问题 感谢各位大佬观看

1 打赏
打赏 20 积分后可见