spring - 如何在 Spring Boot 项目中将 application.properties 中的环境属性获取到 logback.groovy 中?

标签 spring groovy environment-variables logback spring-boot

尝试注入(inject) application.properties/application.yml 中定义的属性进入logback.groovy Spring Boot 项目中的脚本。

我无法注入(inject) EnvironmentApplicationContext进入常规脚本。

有什么解决办法吗?

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

src/main/resources/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"]
}

src/main/resources/application.yml

---
spring:
    profiles:
        active: development

最佳答案

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

我看到两个选项:

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

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

关于spring - 如何在 Spring Boot 项目中将 application.properties 中的环境属性获取到 logback.groovy 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25801691/

相关文章:

groovy - 如何通过 jenkins email-ext 插件使用过滤域?

spring - 如何在Spring的请求参数中发送特殊字符

java - Autowiring : expected at least 1 bean which qualifies as autowire candidate

java - 如何将 ReactJS 与 spring Boot 集成

java - 基于国家/地区的 Spring Boot 依赖注入(inject)

Java 环境变量设置正确,但 java 找不到 jars

groovy - 如何在 SOAPUI 中使用 setNodeValue 更新 XML 请求

java - 正则表达式 - 用换行符替换标签之间的文本

environment-variables - 在 Postman 中使用 url 参数中的环境变量

linux - 在 shell 脚本中传播值