问题

在application.yml配置值后, 在logback-spring.xml 中添加下面的标签

    <springProperty scope="context" name="appName" source="spring.application.name"/>
    <springProperty scope="context" name="hosts" source="demo.host"/>

加载xml文件的时候 发现appName 有值, hosts没值。

排查

全局搜索 springProperty , 发现 org.springframework.boot.logging.logback.SpringPropertyAction 类是负责解析相关值的。
这个类通过 Spring的 Environment 获取yml配置中的值。
在这里插入图片描述看到实际上是加载了 bootstrap.yml 。
本质上是logback比application.yml 更早的去加载

解决

方法一

将配置写到 bootstrap.yml

方法二

将logback-spring.xml改名,如改成logback-delayed.xml,在application.yml指定加载的配置文件,以确保application.yml已经被Spring加载到程序的上下文中

logging:
  config: classpath:logback-delayed.xml

方法三

logback 配置为默认的 logback.xml, 通过property 标签去读取配置文件,不过这个标签对yml格式的支持好像不是太好,logback读到的配置key值的格式风格要与properties相同

    <property resource="application.yml" />
		
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
       <encoder>
            <pattern>${LOG_FORMAT}</pattern>
            <charset>${CHARSET}</charset>
        </encoder>
    </appender>
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐