Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何按application.properties定义log4j2路径?_Java_Spring_Log4j_Log4j2 - Fatal编程技术网

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



另一种方法是:只需登录到classpath
logs
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。