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

mem*_*und 5 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>
Run Code Online (Sandbox Code Playgroud)

结果:在 d:/ 上创建一个文件夹,${spring.profiles.active}而不是解析为真实的 spring 配置文件名称。为什么?

mem*_*und 3

我解决如下:log4j2.xml: ${main:spring.profiles.active}

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

您可以按如下方式获取 vmargs,并在运行 spring 应用程序之前动态设置配置文件: ManagementFactory.getRuntimeMXBean().getInputArguments()


或者更好的是,多年后回到这里:使用${sys:spring.profiles.active}, 作为以 count 作为 SystemProperties 给出的任何参数-D。在这种情况下你不需要MainMapLookup


作为替代方案:仅记录到类路径logs目录,并在执行目录内设置软链接,例如ln -s /var/log logs通过运行系统重定向日志目录。