如何在Spring Boot项目中将application.properties的环境属性导入logback.groovy?

xml*_*ing 9 groovy spring environment-variables logback spring-boot

尝试将Spring Boot项目中定义的属性注入application.properties/application.ymllogback.groovy脚本中.

我不能注入EnvironmentApplicationContext进入groovy脚本.

有没有解决方法?

不是在寻找像这样的解决方案System.getProperty('spring.profiles.active')

SRC /主/资源/ logback.groovy

import org.springframework.core.env.Environment

@Inject private Environment env; //this is not working. how to get env here?
println "spring.profiles.active : ${env.getProperty('spring.profiles.active')}"

appender("STDOUT", ConsoleAppender) {
    encoder(PatternLayoutEncoder) {
        pattern = "%green(%d{HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %cyan(%logger{36}) - %msg%n"
    }
}

if(System.getProperty("spring.profiles.active")?.equalsIgnoreCase("prod")) {
    root INFO, ["STDOUT", "FILE"]
} else {
    root INFO, ["STDOUT"]
}
Run Code Online (Sandbox Code Playgroud)

SRC /主/资源/ application.yml

---
spring:
    profiles:
        active: development
Run Code Online (Sandbox Code Playgroud)

小智 2

logback.groovy 需要尽早评估,否则加载 spring 配置、实例化 beans 等的代码将无法记录任何内容。这就是@Inject无法工作的原因。

我看到两个选项:

  1. 您可以轻松地在 logback.groovy 中加载application.properties,但是考虑 spring 提供的所有配置覆盖机制绝非易事
  2. 创建一个 spring bean,在初始化时以编程方式更改 logback 配置

另一种方法是使用-Dlogback.configurationFile=/path/to/config.groovy在生产环境中外部化 logback 配置。将配置文件放在众所周知的位置(例如/etc/my-app)可以轻松更改生产中的日志级别,而无需重新部署(甚至重新启动)。