springboot logback如何从apollo配置中心读取变量

网友投稿 1382 2022-12-13

springboot logback如何从apollo配置中心读取变量

springboot logback如何从apollo配置中心读取变量

目录springboot logback 从apollo配置中心读取变量1、在apollo配置中心添加2、项目的application.yml配置文件配置如下3、在logback.xml配置springProperty标签SpringBoot Logback无法获取配置中心属性如何解决解决方案

springboot logback 从apollo配置中心读取变量

1、在apollo配置中心添加

logback-config.properties配置文件

2、项目的application.yml配置文件配置如下

主要是eagerLoad.enabled: true这个配置

app:

id: SX-sale-app-soa

apollo:

bootstrap:

enabled: true

#将Apollo配置加载提到初始化日志系统之前

eagerLoad:

enabled: true

namespaces: application.yml,logback-config

3、在logback.xml配置springProperty标签

设置好标签名称和配置中心变量名称的,使用的时候${name}引入该变量

<remoteHost>${logstash.host}

${logstash.port}

{"appname":"server-user"}

这个是后启动日志中会报如下错误:

20:26:50,683 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@120:31 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]

20:26:50,683 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@121:58 - no applicable action for [logger], current ElementPath is [[configuration][springProfile][logger]]

20:26:50,683 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@132:42 - no applicable action for [appender-ref], current ElementPath is [[configuration][springProfile][logger][appender-ref]]

这是因为日志文件的名称是logback.xml的话,logback会在http://SpringCloud和apollo配置加载之前加载日志配置,这时日志文件中的springProfile的配置是无效的。所以根据官方文档说明,需要将logback.xml改为logback-spring.xml,然后报错就没有了。

注:虽然logback.xml文件名启动时会报错,但是不影响实际效果,猜测是因为上边第二步中的配置会在后边再次加载logback日志,所以logback依然会产生效果,但是对于有代码洁癖的人来说,没有任何报错和异常才是最舒服的。

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

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

如何解决

问题原因

在springboot官网 https://docs.spring.mszWuzYrxio/spring-boot/docs/2.0.4.RELEASE/reference/htmlsingle/

中对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

value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - [%method,%line] - %msg%n" />: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

value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - [%method,%line] - %msg%n" />: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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:JVM:你知道为什么对象一定在堆中分配吗
下一篇:Scala中优雅的处理Null问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~