Java 如何按application.properties定义log4j2路径?
我希望根据当前活动配置文件拥有不同的Java 如何按application.properties定义log4j2路径?,java,spring,log4j,log4j2,Java,Spring,Log4j,Log4j2,我希望根据当前活动配置文件拥有不同的log4j2log目录。但它不起作用 #application.properties: spring.profiles.active=dev log.path=d:/${spring.profiles.active} #log4j2.xml: <Properties> <property name="path">${bundle:application:log.path}</property> </Propert
log4j2
log目录。但它不起作用
#application.properties:
spring.profiles.active=dev
log.path=d:/${spring.profiles.active}
#log4j2.xml:
<Properties>
<property name="path">${bundle:application:log.path}</property>
</Properties>
#application.properties:
spring.profiles.active=dev
log.path=d://${spring.profiles.active}
#log4j2.xml:
${bundle:application:log.path}
结果:在d://上创建了一个名为${spring.profiles.active}
的文件夹,而不是解析为真正的spring配置文件名。为什么?
结果:在d:///code>上创建了一个名为${spring.profiles.active}
而不是解析为真正的spring概要文件名。为什么?
log4j2和Spring之间没有关系。应用程序.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
给出的任何参数都算作系统属性。在这种情况下,不需要MainMapLookup
另一种方法是:只需登录到classpathlogs
dir,并在执行目录中设置一个软链接,例如ln-s/var/log logs
,即可通过运行的系统重定向日志目录。您可以使用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配置。Checkout Hm,那么是否还有其他机会可以通过spring profile属性导出登录路径?@membersound可能有一些集成,但我不知道。这不起作用。如果我在application.properties中指定logging.config=classpath:log4j2.xml,在application-local.properties中指定logging.config=classpath:log4j2-local.xml,并且我使用-Dspring.profiles.active:local启动应用程序。它仍然查找log4j2.xml,而不是log4j2-local.xml。