gpt4 book ai didi

spring-boot - 在 log4j2.xml 中使用 Spring Boot 应用程序属性

转载 作者:行者123 更新时间:2023-12-04 00:58:03 31 4
gpt4 key购买 nike

我正在开发一个基于 Spring Boot 的 Web 应用程序,并希望使用 log4j2 作为记录器实现。
使用 中定义的日志记录配置一切正常。 log4j2-spring.xml 文件。

什么不工作:我想在 log4j2-spring.xml 文件中使用属性占位符,应该从 中定义的属性中解析。应用程序.yml 用于配置 Spring Boot 的文件。

这可能吗?如果是,如何?

最佳答案

我在将 Spring Boot YAML 属性注入(inject) log4j xml 配置时遇到了类似的问题,我找到了 Spring Boot 1.5.X(可能是 2.0,我没有测试它)的解决方案,它有点 hacky 并且可以在系统上运行属性查找,但它确实有效。

假设您的应用程序中有配置文件“dev”和一些要注入(inject)的属性,那么您的 应用程序-dev.yml 看起来像这样:

property:
toInject: someValue

在您的 xml 配置中 log4j2-spring-dev.xml 你放了这样的东西:
<Properties>
<property name="someProp">${sys:property.toInject}</property>
</Properties>

现在您必须以某种方式将此 Spring 属性转移到系统属性。您必须在准备好应用程序环境之后和日志系统初始化之前执行此操作。在 Spring Boot 中有一个监听器 LoggingApplicationListener,它初始化整个日志系统,它是由事件 ApplicationEnvironmentPreparedEvent 触发的,所以让我们创建一个比 LoggingApplicationListener 优先级更高的监听器:
public class LoggingListener implements ApplicationListener, Ordered {

@Override
public int getOrder() {
return LoggingApplicationListener.DEFAULT_ORDER - 1;
}

@Override
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof ApplicationEnvironmentPreparedEvent) {
ConfigurableEnvironment environment = ((ApplicationEnvironmentPreparedEvent) event).getEnvironment();
List<String> activeProfiles = Arrays.asList(environment.getActiveProfiles());
if (!activeProfiles.contains("dev")) {
return;
}

String someProp = environment.getProperty("property.toInject")
validateProperty(someProp);

System.setProperty("property.toInject", someProp);
}
}

现在在您的应用程序中注册此监听器:
public static void main(String[] args) {
SpringApplication application = new SpringApplication(MyApplication.class);
application.addListeners(new LoggingListener());
application.run(args);
}

就是这样。您的 Spring Boot 属性应该在您的 log4j2 配置文件中“注入(inject)”。此解决方案适用于类路径属性和 --spring.config.location 属性。请注意,它不适用于某些外部配置系统,例如 Spring Cloud Config。

希望能帮助到你

关于spring-boot - 在 log4j2.xml 中使用 Spring Boot 应用程序属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48941104/

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