log4j - log-rotation 没有清除 rotator 日志

Posted

技术标签:

【中文标题】log4j - log-rotation 没有清除 rotator 日志【英文标题】:log4j - log-rotation is not clearing out the rotator logs 【发布时间】:2020-05-16 16:52:35 【问题描述】:

我正在使用 log4j 1.x(带有 slf4j)。日志轮换是工作文件,但它不会清除轮换的日志。

这是log4.xml的内容——

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">

<appender name="app1" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="$catalina.home/logs_folder/webint.log"/>
    <param name="Append" value="true"/>
    <param name="MaxBackupIndex" value="24"/>
    <param name="immediateFlush" value="true"/>
    <param name="DatePattern" value="'.'yyyy-MM-dd"/>
    <param name="ConversionPattern" value="%dyyyy-MM-dd-%t-%x-%-5p-%-10c:%m%n" />
  </appender>

  <root>
      <level value="INFO" />
      <appender-ref ref="app1"/>
   </root>

</log4j:configuration>

由于某种原因,生成了 300 多个文件,而不是 24 个文件。每个日志文件的大小从 150MB 到 350MB 不等,并且每小时轮换一次。

在 pom.xml 中,

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.12.1</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.25</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
</dependency>

依赖树:

\- org.slf4j:slf4j-log4j12:jar:1.7.25:compile
    \- log4j:log4j:jar:1.2.16:compile (version managed from 1.2.17)

我需要了解 -

    为什么在 MaxBackupIndex 设置时会生成超过 24 个文件 提到24? 由于我没有指定任何MaximumFileSize, 不应该 默认 10MB?

【问题讨论】:

【参考方案1】:

使用 RollingFileAppender 代替 DailyRollingFileAppender 由于最大备份文件不适用于 DailyRollingFileAppender

如果您想使用最大备份索引进行每日滚动,您可以按照在 https://www.codeproject.com/Articles/81462/DailyRollingFileAppender-with-maxBackupIndex

希望对你有帮助 干杯

【讨论】:

以上是关于log4j - log-rotation 没有清除 rotator 日志的主要内容,如果未能解决你的问题,请参考以下文章

Kafka日志设置和清除策略

log4j删除N天前日志实现

Yarn聚合日志, 过期清除配置不生效

基于Log4j完成定时创建和删除日志的方法

JavaFX - 自动清除文本区域(滚动策略?)

数据库异常信息为啥没有写入log4j日志文件中