如何在log4j2 fileName中使用当前日期模式?

时间:2016-03-14 08:17:20

标签: java tomcat log4j log4j2

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Properties>
        <property name="filePattern">%d{yyyy-MM-dd}</property>
    </Properties>
    <Appenders>
        <RollingFile name="TEST" fileName="application-${filePattern}.log" filePattern="application-${filePattern}-rolled.log">
            <Policies>
                <TimeBasedTriggeringPolicy modulate="true"/>
            </Policies>
        </RollingFile>
    </Appenders>
    //...
</Configuration>

我想直接在书面日志文件中使用当前日期。但上面配置的结果是application-%{yyyy-MM-dd}作为文件名。

为什么日期占位符未解决? 顺便说一下:午夜重命名的文件被正确地重命名为application-2016-03-13-rolled.log。为什么它在那里工作,但不在当前的日志文件中?

如果重要的话,我正在运行tomcat 8java 8

4 个答案:

答案 0 :(得分:4)

这个有用(为什么):

<property name="filePattern">${date:yyyy-MM-dd}</property>

答案 1 :(得分:1)

我不知道为什么占位符没有解决,但这是我的工作配置:

  <Appenders>
    <RollingFile 
        name="Permament" 
        fileName="E:/workspace/myproject/logs/ergo.log"
        filePattern="E:/workspace/myproject/logs/ergo.%d{yyyy-MM-dd.HH:mm}.log"
        immediateFlush="true">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} %5p{length=5} - %c{1} %m %ex%n"/>
        <Policies>
            <TimeBasedTriggeringPolicy/>
        </Policies>
    </RollingFile>

答案 2 :(得分:0)

删除文件名属性。它为我工作。 (从https://issues.apache.org/jira/browse/LOG4J2-1859获得解决方案)这是我的工作配置

    <RollingFile name="File" filePattern="${basePath}/api_test_execution_log_%d{yyyy-MM-dd}_%d{HH-mm-ss}_%i.log" immediateFlush="true">
       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>

       <Policies>
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            <SizeBasedTriggeringPolicy size="32 MB" />
            <OnStartupTriggeringPolicy/>
       </Policies>
    </RollingFile>

答案 3 :(得分:0)

对于使用Log4j2 2.6.2及更低版本的用户:

fileName确实是一个文件名,在 应用程序正在运行。如果您不希望此行为升级到 最新版本的Log4j 2,并且未指定fileName 属性。

来自https://issues.apache.org/jira/browse/LOG4J2-1859