How to define log4j2 path by application.properties?

与世无争的帅哥 提交于 2019-12-06 04:58:26

问题


I want to have different log4j2 log directories based on the current active profile. But it does not work.

#application.properties:
spring.profiles.active=dev
log.path=d:/${spring.profiles.active}

#log4j2.xml:
<Properties>
  <property name="path">${bundle:application:log.path}</property>
</Properties>

Result: a folder is created on d:/ called ${spring.profiles.active} instead of resolving to the real spring profile name. Why?


回答1:


I solved it as follows: log4j2.xml: ${main:spring.profiles.active}

MainMapLookup.setMainArguments(new String[] {"spring.profiles.active", "dev"});
SpringApplication.run(source, args);

You can get the vmargs as follows, and set the profile dynamically before running the spring app: ManagementFactory.getRuntimeMXBean().getInputArguments()


Or even better, coming back to this after years: use ${sys:spring.profiles.active}, as any arguments given with -D count as SystemProperties. You don't need the MainMapLookup in this case.


As an alternative: just logging to the classpath logs dir, and setting a soft link inside the execution directory, eg ln -s /var/log logs to redirect the log directory by the running system.




回答2:


Result: a folder is created on d:/ called ${spring.profiles.active} instead of resolving to the real spring profile name. Why?

There's no relation between log4j2 and Spring. The placeholder you have in your application.properties is for Spring to parse and replace. Log4j2 is not aware of it.




回答3:


You can use logging.config to set log4j2 path in application.yaml, like

---
spring:
   profiles: test
logging.config: classpath:log4j2.test.yaml
---
spring:
   profiles: online
logging.config: classpath:log4j2.online.yaml

with log4j2.test.yaml and log4j.online.yaml, you can set different log4j2 config in different env.



来源:https://stackoverflow.com/questions/28768905/how-to-define-log4j2-path-by-application-properties

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!