如何通过application.properties定义log4j2路径?

时间:2015-02-27 15:44:10

标签: java spring log4j log4j2

我希望根据当前活动的配置文件拥有不同的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}上创建了一个文件夹,而不是解析为真正的弹簧配置文件名称。为什么呢?

3 个答案:

答案 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配置。