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

问题描述 投票:0回答:1

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

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

在创建 Logger 实例之前的 JAVA 层中,我们将 log.filePath 系统属性替换为实际值

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

我们想确保系统属性 log.filePath 是否不可用/被替换,然后希望在 java.io.tmpdir 目录中创建名称为 app.log 的日志文件。

根据 Log4j2 系统属性查找文档 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"

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

java configuration log4j log4j2 lookup
1个回答
1
投票

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

  • 使用
    ${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>
    
© www.soinside.com 2019 - 2024. All rights reserved.