Log4j - DailyRollingFileAppender - 滚动文件是否在一段时间后被删除?

时间:2012-12-13 17:09:09

标签: java logging log4j

This answer表示日志保留7天。这是可配置的吗?

Java Ranch Pos t表示永远不会删除文件。

此站点也同意永远不会删除日志文件:

  

如果您尝试将Apache Log4J DailyRollingFileAppender用于日常日志文件,则可能需要指定应保留的最大文件数。就像滚动RollingFileAppender支持maxBackupIndex一样。但是,如果您使用DailyRollingFileAppender,则当前版本的Log4j(Apache log4j 1.2.16)不提供删除旧日志文件的任何机制。我试图在DailyRollingFileAppender的原始版本中进行小的修改以添加maxBackupIndex属性。因此,可以清理旧日志文件,以备将来使用时使用。

Source

我找不到权威的答案,我不想等7天才能看到我的日志是否被删除。

1 个答案:

答案 0 :(得分:3)

有关Log4J删除的信息,请参阅此this post。总之,似乎dailyRollingFileAppender不能。但也许你可能想看看切换到Logback。它是由同一个人写的,可以做你想要的。

我使用以下appender来维护30天的HTML日志:

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>Logs\logFile.html</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- daily rollover -->
      <fileNamePattern>logFile.%d{yyyy-MM-dd}.html</fileNamePattern>

      <!-- keep 30 days' worth of history -->
      <maxHistory>30</maxHistory>
    </rollingPolicy>

    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
    <charset>UTF-8</charset>
        <layout class="ch.qos.logback.classic.html.HTMLLayout">
            <pattern>%d{HH:mm:ss.SSS}%thread%level%logger%line%msg</pattern>
        </layout>           
    </encoder>
</appender>

手册中的relevant sectionmaxHistory上声明了以下内容:

  

可选的maxHistory属性控制要保留的最大归档文件数,删除旧文件。例如,如果您指定每月翻转,并将maxHistory设置为6,则将保留6个月的归档文件,并删除超过6个月的文件。请注意,删除旧的归档日志文件后,将删除为日志文件归档而创建的所有文件夹。

Logback还有一个Log4J属性转换器here可用于帮助完成转换。以及entire chapter in their manual致力于从Log4J切换。