【问题标题】:Get the file name from complete path in log4j2 xml从 log4j2 xml 中的完整路径获取文件名
【发布时间】:2018-09-19 09:44:33
【问题描述】:

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

-Dlogfilename=/home/user/logs/server

Log4j2 配置:

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

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

【问题讨论】:

    标签: xml logging log4j log4j2


    【解决方案1】:

    您错误地使用了System Properties Lookup。您应该像这样指定查找和要查找的键:${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!
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 1970-01-01
      • 2011-04-13
      • 2011-04-19
      相关资源
      最近更新 更多