java - log4j2 RollingFile Appender 不更改 Tomcat 上的文件名?

标签 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>

专家:

<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>

最佳答案

您不是第一个报告此行为的人,共同因素似乎是 Windows。 Log4j 尝试重命名该文件。如果失败,它会尝试复制和删除,然后删除该文件。如果文件上有锁,重命名将失败,然后很可能复制成功但删除失败。但是代码仍然使用 File 对象的 delete 方法,它不擅长报告错误,而且 Log4j 不检查返回值,因此它会静默失败。

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

关于java - log4j2 RollingFile Appender 不更改 Tomcat 上的文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36978672/

相关文章:

java - 重命名 Derby 架构

spring - 如何使用 ModelAndView 在 RestController 上实现 REST API

spring - *.configuration.SecondaryDataSource 中方法 entityManagerFactory 的参数 0 需要找不到类型为 '*.EntityManagerFactoryBuilder' 的 bean

java - Servlets 从没有 enctype ="multipart/form-data"的表单上传文件

java - Tomcat 仍然不显示目录列表,即使我在 conf/web.xml 中启用它

spring - 如何通过 HTTPS 通过 Maven Tomcat7 运行 Spring 应用程序?

java - mongo-operations spring mongo批量操作执行异常(CodecConfigurationException : Can't find a codec for class)

java - 在java中自动删除jRadioButton

java - 嵌入多对一关系的属性

spring - 为什么我的 Spring @autowired DAO 没有 Autowiring ?