我正在尝试使用RollingFile附加程序配置log4j2,以便保存以前的日志文件,并且每次运行都有一个新的日志文件。

log4j2.xml中的附加程序配置如下:

    <RollingFile name="Logfile" >
        <append value="false" />
        <filePattern value="log-%d{yyyy-MM-dd_HHmm}.txt" />
        <fileName value="log.txt" />
        <PatternLayout pattern="[%d{HH:mm:ss.SSS}] [%N] [%-5level] [%-16t] [%-20logger{36}]: %msg%n"/>
        <Policies>
            <OnStartupTriggeringPolicy />
        </Policies>
    </RollingFile>


运行应用程序时,我立即收到以下错误:

2016-07-26 12:15:54,888 main ERROR Unable to create file  java.io.IOException: The system cannot find the path specified
    at java.io.WinNTFileSystem.createFileExclusively(Native Method)
    at java.io.File.createNewFile(File.java:1012)
    ...
2016-07-26 12:15:54,919 main ERROR Null object returned for RollingFile in Appenders.


使用简单的File附加程序会在程序目录中创建所需的日志文件,因此我希望RollingFile附加程序也能够处理相对路径。可能会这样,因为绝对路径也不起作用。如果我将程序目录的路径或%TMP% env var的实际值放在fileNamefilePattern的前面,则会收到相同的错误。

因此,非常感谢您为我的目标配置log4j2的任何帮助...

最佳答案

fileNamefilePattern是RollingFile标签的属性,而不是子标签的属性:

<RollingFile name="RollingFile" fileName="logs/app.log"
             filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">


https://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender

10-06 16:05