在 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"
有人可以建议是否支持使用系统属性查找默认值吗?
:-
之后的后备值被视为文字,但接受嵌套查找。所以你有两个选择:
${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>