log4j2属性文件中的嵌套查找和替换系统属性

a8jjtwal  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(107)

在log4j2.properties文件中,我们有以下定义来通过系统属性log.filePath接受动态文件路径

appender.file.fileName=${sys:log.filePath}

字符串
在JAVA层中,在创建Logger示例之前,我们将log. filePathSystem属性替换为实际值

System.setProperty("log.filePath" + logfilePath);


我们要确保如果系统属性log.filePath不可用/不可替换,那么要在java.io.tmpdir目录中创建名为app.log的日志文件。
根据Log4j 2系统属性查找文档https://logging.apache.org/log4j/2.x/manual/lookups.html,存在以下语法fileName="${sys:logPath:-/var/logs}/app.log"以在/var/logs/app. log中创建默认日志
考虑到Unix和Windows环境,我们希望使用java.io.tmpdir系统属性而不是/var/logs目录
我尝试了以下语法的多种组合,但不起作用

fileName="${sys:logPath:-sys:java.io.tmpdir}/app.log"


有人能建议一下是否支持使用系统属性查找默认值吗?

des4xlb0

des4xlb01#

:-后面的回退值被视为文字,但接受嵌套查找。所以你有两个选择

  • 使用${sys:logPath:-${sys:java.io.tmpdir}}
  • 或者定义一个名为logPath的配置属性(${sys:logPath}的默认回退是${logPath}):
<Properties>
  <Property name="logPath" value="${sys:java.io.tmpdir}"/>
</Properties>
<Appenders>
  <File fileName="${sys:logPath}/app.log" .../>
</Appenders>

字符串

相关问题