log4j2 RollingFile Appender没有改变Tomcat上的文件名?

时间:2016-05-02 09:01:02

标签: java spring tomcat log4j log4j2

我有一个使用log4j2的网络应用程序。应该每天创建日志。

问题:旧文件的内容永远不会被删除,但任何新的一天都会附加到该文件中。所以它不断增长。在tomcat8上运行时,以下配置是否正确?

log4j2.xml:

<Configuration>
    <Appenders>
        <RollingFile name="TEST" fileName="d:\test-application.txt" filePattern="d:\test-application-%d{yyyy-MM-dd}.log">
            <Policies>
                <TimeBasedTriggeringPolicy modulate="true"/>
            </Policies>
        //...
        <RollingFile>
    //...
    </Appenders>
    //...
</Configuration>

的Maven:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>

2 个答案:

答案 0 :(得分:1)

您不是第一个报告此行为的人,而且常见因素似乎是Windows。 Log4j尝试重命名该文件。如果失败则尝试复制并删除然后删除该文件。如果文件存在锁定,则重命名将失败,然后很可能副本成功但删除失败。但是代码仍然使用File对象的delete方法,它不擅长报告错误而Log4j没有检查返回值,因此它无声地失败。

这种行为是一个错误,应该修复,但它不会真正解决您的问题 - 它只会让您知道它。要修复它,您需要找出阻止重命名成功的原因。

答案 1 :(得分:0)

我们经常看到的是使用相同log4j2.xml配置并记录到同一文件的多个进程或多个Web应用程序。然后,一个进程将阻止另一个进程删除该文件。

当我在编辑器中保持日志文件打开时,我遇到了这个问题,因此午夜翻转会失败。