我希望根据当前活动的配置文件拥有不同的log4j2
日志目录。但它不起作用。
#application.properties:
spring.profiles.active=dev
log.path=d:/${spring.profiles.active}
#log4j2.xml:
<Properties>
<property name="path">${bundle:application:log.path}</property>
</Properties>
结果:在d:/ ${spring.profiles.active}
上创建了一个文件夹,而不是解析为真正的弹簧配置文件名称。为什么呢?
答案 0 :(得分:2)
我解决了如下:
log4j2.xml:
${main:spring.profiles.active}
MainMapLookup.setMainArguments(new String[] {"spring.profiles.active", "dev"});
SpringApplication.run(source, args);
您可以按如下方式获取vmargs,并在运行spring app之前动态设置配置文件:
ManagementFactory.getRuntimeMXBean().getInputArguments()
甚至更好,多年后再回到这里:
使用${sys:spring.profiles.active}
,因为-D
给出的任何参数都算作SystemProperties。在这种情况下,您不需要MainMapLookup
。
答案 1 :(得分:1)
结果:在名为
d:/
的{{1}}上创建了一个文件夹 而不是解析真正的春季配置文件名称。为什么呢?
log4j2和Spring之间没有任何关系。您${spring.profiles.active}
中的占位符是Spring要解析和替换的。 Log4j2不知道它。
答案 2 :(得分:0)
您可以使用logging.config在application.yaml中设置log4j2路径,例如
---
spring:
profiles: test
logging.config: classpath:log4j2.test.yaml
---
spring:
profiles: online
logging.config: classpath:log4j2.online.yaml
使用log4j2.test.yaml和log4j.online.yaml,您可以在不同的环境中设置不同的log4j2配置。