gpt4 book ai didi

java - Logback 和 Spring Boot 的新 springProperty 查找机制不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:05:47 24 4
gpt4 key购买 nike

我正在通过 spring-cloud Brixton.M2​​ 使用 Spring Boot 1.3.0.RC1,并且无法将 spring boot 属性拉入 logback.xml,正如此功能 checkin Support springProperty in logback configurations 所暗示的那样

我正在使用 .yml 文件并想从 bootstrap.yml 或 application.yml 中提取应用程序名称。

logback-spring.xml:

<configuration>
<springProperty scope="context" name="myappName" source="spring.application.name"/>
<contextName>${myappName}</contextName>
<appender name="logFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/${myappName}.log</file>
...
</appender>
...
</configuration>

此处的文档 Spring Boot Logback extensions帮助不大。

这个其他 stackoverflow 问题 Unable to use Spring Property Placeholders in logback.xml年纪大了,也不适合我。任何见解都会有所帮助。

每个请求,这是正在使用的相关依赖树

[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:1.3.0.RC1:compile
[INFO] | +- org.springframework.boot:spring-boot-starter:jar:1.3.0.RC1:compile
[INFO] | | +- org.springframework.boot:spring-boot:jar:1.3.0.RC1:compile
[INFO] | | +- org.springframework.boot:spring-boot-autoconfigure:jar:1.3.0.RC1:compile
[INFO] | | +- org.springframework.boot:spring-boot-starter-logging:jar:1.3.0.RC1:compile
[INFO] | | | +- ch.qos.logback:logback-classic:jar:1.1.3:compile
[INFO] | | | | \- ch.qos.logback:logback-core:jar:1.1.3:compile
[INFO] | | | +- org.slf4j:jcl-over-slf4j:jar:1.7.12:compile
[INFO] | | | +- org.slf4j:jul-to-slf4j:jar:1.7.12:compile
[INFO] | | | \- org.slf4j:log4j-over-slf4j:jar:1.7.12:compile
[INFO] | | \- org.yaml:snakeyaml:jar:1.16:runtime

根据第二次信息请求,实际发生的情况是 logback 属性 myappName 没有获得值。我知道的方式是该值变为“myappName_IS_UNDEFINED”,我的日志文件被命名为“myappName_IS_UNDEFINED.log”,%contextName 设置为“myappName_IS_UNDEFINED”。

最佳答案

为 future 的读者提供我的分析和解决方案...我尝试在 bootstrap.yml 中使用 spring.application.name 值,然后是 application。 yml,然后是 application.properties 但都没有用。我以为是因为我用了logback.xml,但是转成logback-spring.xml结果没有任何变化。查看提交的代码 here ,通过 this.environment.getProperty(source) 提取值取决于加载属性源的时间与解释 logback-spring.xml 文件的时间。不确定为什么 Dave Syer 能够让它工作,但我的 .xml 变量是在将本地属性源添加到环境之前填充的。

如果我通过 SpringApplication.setDefaultProperties() 设置值,则 会填充到 .xml 文件中。因此,这就是我选择的路线。

  • 构建了一个 SpringApplicationRunListener
  • SpringApplicationRunListener.started() 中,我通过 new ClassPathResource("/bootstrap.yml")
  • 根据值在 HashMap 中设置一个新属性 service.log.name
  • 使用该 HashMap 调用了 SpringApplication.setDefaultProperties()
  • 然后我可以在 logback-spring.xml 文件中使用 ${myappName}

我承认这不是一个完美的解决方案,但目前可以使用,并且很可能会在未来的 springBoot 版本中继续使用。我对进一步的想法持开放态度,但想提供一个适用于具有相同经验的其他人的解决方案。

关于java - Logback 和 Spring Boot 的新 springProperty 查找机制不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33505624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com