我有一个使用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>
答案 0 :(得分:1)
您不是第一个报告此行为的人,而且常见因素似乎是Windows。 Log4j尝试重命名该文件。如果失败则尝试复制并删除然后删除该文件。如果文件存在锁定,则重命名将失败,然后很可能副本成功但删除失败。但是代码仍然使用File对象的delete方法,它不擅长报告错误而Log4j没有检查返回值,因此它无声地失败。
这种行为是一个错误,应该修复,但它不会真正解决您的问题 - 它只会让您知道它。要修复它,您需要找出阻止重命名成功的原因。
答案 1 :(得分:0)
我们经常看到的是使用相同log4j2.xml配置并记录到同一文件的多个进程或多个Web应用程序。然后,一个进程将阻止另一个进程删除该文件。
当我在编辑器中保持日志文件打开时,我遇到了这个问题,因此午夜翻转会失败。