如何通过application.properties定义log4j2路径?
How to define log4j2 path by application.properties?
我想根据当前的活动配置文件使用不同的 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}
的文件夹,而不是解析为真正的 spring 配置文件名称。为什么?
Result: a folder is created on d:/
called ${spring.profiles.active}
instead of resolving to the real spring profile name. Why?
log4j2和Spring没有关系。 application.properties
中的占位符供 Spring 解析和替换。 Log4j2 并不知道它。
我是这样解决的:
log4j2.xml:
${main:spring.profiles.active}
MainMapLookup.setMainArguments(new String[] {"spring.profiles.active", "dev"});
SpringApplication.run(source, args);
您可以通过以下方式获取vmargs,并在运行 spring 应用程序之前动态设置配置文件:
ManagementFactory.getRuntimeMXBean().getInputArguments()
或者甚至更好,多年后回到这里:
使用 ${sys:spring.profiles.active}
,因为使用 -D
给出的任何参数都算作 SystemProperties。在这种情况下,您不需要 MainMapLookup
。
作为替代方案:只需登录到类路径 logs
目录,并在执行目录中设置软 link,例如 ln -s /var/log logs
通过 [=] 重定向日志目录31=]系统.
您可以使用 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配置。
我想根据当前的活动配置文件使用不同的 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}
的文件夹,而不是解析为真正的 spring 配置文件名称。为什么?
Result: a folder is created on
d:/
called${spring.profiles.active}
instead of resolving to the real spring profile name. Why?
log4j2和Spring没有关系。 application.properties
中的占位符供 Spring 解析和替换。 Log4j2 并不知道它。
我是这样解决的:
log4j2.xml:
${main:spring.profiles.active}
MainMapLookup.setMainArguments(new String[] {"spring.profiles.active", "dev"});
SpringApplication.run(source, args);
您可以通过以下方式获取vmargs,并在运行 spring 应用程序之前动态设置配置文件:
ManagementFactory.getRuntimeMXBean().getInputArguments()
或者甚至更好,多年后回到这里:
使用 ${sys:spring.profiles.active}
,因为使用 -D
给出的任何参数都算作 SystemProperties。在这种情况下,您不需要 MainMapLookup
。
作为替代方案:只需登录到类路径 logs
目录,并在执行目录中设置软 link,例如 ln -s /var/log logs
通过 [=] 重定向日志目录31=]系统.
您可以使用 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配置。