首页 > 解决方案 > 从 log4j2 xml 中的完整路径获取文件名

问题描述

在我的 log4j2.xml 文件中,我通过传递系统属性来获取日志文件的完整路径

-Dlogfilename=/home/user/logs/server

Log4j2 配置:

<Property name="logFile">${sys:logfilename:-/home/user/logs/server}</Property>

作为附加要求,我需要从上述属性中获取日志文件的名称,并且我无法传递新的系统属性。如何从完整路径中获取文件名?除了用于数据传输之外,我对 XML 没有任何经验。

标签: xmllogginglog4jlog4j2

解决方案


您错误地使用了系统属性查找。您应该像这样指定查找和要查找的键:${sys:logfilename}

这是一个简单的例子:

package example;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;


public class SomeClass {

    private static final Logger log = LogManager.getLogger();

    public static void main(String[] args){
        log.info("Here's some info!");
    }
}

这是 log4j2.xml 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <File name="File" fileName="logs/${sys:myProperty}"
            immediateFlush="false" append="false">
            <PatternLayout
                pattern="%-5level %logger{36} - %msg%n" />
        </File>
    </Appenders>

    <Loggers>
        <Root level="debug">
            <AppenderRef ref="File"  />
        </Root>
    </Loggers>
</Configuration>

当我使用以下 JVM 参数运行此代码时:

-DmyProperty=myFile.log

它会生成一个名为“myFile.log”的文件,该文件包含以下输出:

INFO  example.SomeClass - Here's some info!

推荐阅读