SpringBoot Logback无法获取配置中心属性


SpringBoot Logback无法获取配置中心属性

前言

最近在做项目中,需要把项目中的日志信息通过RabbitMQ将规定格式的消息发送到消息队列中,然后ELK系统通过消息队列拿日志并且保存起来,在日志的配置文件(logback-spring.xml)中我们需要加入RabbitMQ的配置信息,我们的RabbitMQ信息存在Nacos的配置中心,就出现项目启动无法获取到RabbitMQ的配置,导致出错

如何解决

问题原因

在springboot官网 https://docs.spring.io/spring-boot/docs/2.0.4.RELEASE/reference/htmlsingle/#boot-features-logging
中对LogBack的描述中我们可以知道,项目启动时,logback.xml或者logback-spring.xml加载早于applicaton.yml,所以我们在logback.xml中配置的RabbitMQ属性无法获取到





source指定的是application.yml配置文件的key

解决方案

将logback.xml或者logback-spring.xml文件自定义名称,并在配置中心中指定该文件,这样SpringBoot就不会在获取配置中心配置之前加载日志配置了

配置中心的配置

#RabbitMQ配置
spring:
   rabbitmq:
     host: 127.0.0.1
     virtual-host: test
     username: admin
     password: 123

logging:
  config: classpath:logback-test.xml

日志配置

logback-test.xml

<?xml version="1.0" encoding="UTF-8"?>

    
   
    
    
    
    
    
    
    

   
   :ss} %-5level ${springAppName:-} %thread %logger %msg%n"/>

    
   
      
         ${log.pattern}
            UTF-8
      
   

    
   
       ${log.path}/${app_name}.log
        
      
            
         ${log.path}/${app_name}.%d{yyyy-MM-dd}.%i.log
         
         10
            10MB
      
        true
      
         ${log.pattern}
            UTF-8
      
      
            
            INFO
            
            ACCEPT
            
            DENY
        
   
    
    
        
        
            
                {
                    "appName":"${app_name}",
                    "appInstance":"${app_instance_id}",
                    "date":"%d{yyyy-MM-dd HH:mm:ss.SSS}",
                    "thread":"[%thread]",
                    "level":"%-5level",
                    "logger":"%logger{36}",
                    "msg":"%msg"
                }
            
        
        ${rabbitmq_host}
        5672
        ${rabbitmq_username}
        ${rabbitmq_password}
        ${rabbitmq_vhost}
        false
        direct
        logs.direct
        logback
        true
        false
        UTF-8
        NON_PERSISTENT
        
            info
            ACCEPT
            DENY