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

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

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

如何解决 问题原因

在springboot官网(

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

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

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

<property source="spring.rabbitmq.host"/> <property source="spring.rabbitmq.virtual-host"/> <property source="spring.rabbitmq.username"/> <property source="spring.rabbitmq.password"/>

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"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- 日志存放路径 --> <property value="./target/logs/system-service" /> <!-- 参数 --> <property source="spring.application.name"/> <property source="rabbitmq.instance"/> <property source="spring.rabbitmq.host"/> <property source="spring.rabbitmq.virtual-host"/> <property source="spring.rabbitmq.username"/> <property source="spring.rabbitmq.password"/> <!-- 日志输出格式 --> <property value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - [%method,%line] - %msg%n" />:ss} %-5level ${springAppName:-} %thread %logger %msg%n"/> <!-- 控制台输出 --> <appender> <encoder> <pattern>${log.pattern}</pattern> <charset>UTF-8</charset> </encoder> </appender> <!-- 系统日志输出 --> <appender> <file>${log.path}/${app_name}.log</file> <!-- 循环政策:基于时间创建日志文件 --> <rollingPolicy> <!-- 日志文件名格式 --> <fileNamePattern>${log.path}/${app_name}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 日志最大的历史 60天 --> <maxHistory>10</maxHistory> <maxFileSize>10MB</maxFileSize> </rollingPolicy> <append>true</append> <encoder> <pattern>${log.pattern}</pattern> <charset>UTF-8</charset> </encoder> <filter> <!-- 过滤的级别 --> <level>INFO</level> <!-- 匹配时的操作:接收(记录) --> <onMatch>ACCEPT</onMatch> <!-- 不匹配时的操作:拒绝(不记录) --> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 日志发送到消息队列RabbitMQ,接入ELK --> <appender> <!-- 纯文本,不是格式化的JSON --> <layout> <pattern> { "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" } </pattern> </layout> <host>${rabbitmq_host}</host> <port>5672</port> <username>${rabbitmq_username}</username> <password>${rabbitmq_password}</password> <virtualHost>${rabbitmq_vhost}</virtualHost> <declareExchange>false</declareExchange> <exchangeType>direct</exchangeType> <exchangeName>logs.direct</exchangeName> <routingKeyPattern>logback</routingKeyPattern> <generateId>true</generateId> <durable>false</durable> <charset>UTF-8</charset> <deliveryModel>NON_PERSISTENT</deliveryModel> <filter> <level>info</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--系统操作日志--> <root level="INFO"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> <appender-ref ref="RabbitMQ" /> </root> </configuration>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxdgw.html