【问题标题】:How to rotate log files based on time rather than size in Log4j?如何在 Log4j 中根据时间而不是大小来轮换日志文件?
【发布时间】:2009-11-10 21:40:44
【问题描述】:

我使用 Log4j 和 RollingFileAppender 来创建基于大小的日志轮换。

如何将其配置为在轮换之前将其记录到每个文件一定量的时间

例如,让每个日志文件包含一小时的日志,在每个小时的顶部轮换?

我在 Java 中使用 Properties 对象(而不是 log4j.properties 文件)以编程方式配置 Log4j

【问题讨论】:

    标签: java log4j


    【解决方案1】:

    您可能想使用DailyRollingFileAppender。例如,要每小时滚动一次,您可以使用 '.'yyyy-MM-dd-HH 的 DatePattern。对于 log4j.properties 文件:

    log4j.appender.myAppender=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.myAppender.DatePattern='.'yyyy-MM-dd-HH
    ...
    

    或者为您的程序化配置:

    DailyRollingFileAppender appender = new DailyRollingFileAppender();
    appender.setDatePattern("'.'yyyy-MM-dd-HH");
    
    Logger root = Logger.getRootLogger();
    root.addAppender(appender);
    

    不幸的是,使用 DailyRollingFileAppender 意味着您无法限制文件大小 - 如果您在给定的滚动期间有大量日志,这可能会出现问题。

    【讨论】:

    • 但是没有潜在的线程问题吗?我听说过其他线程正在记录时它无法翻转的情况。
    • DailyRollingFileAppender 出现同步问题和数据丢失。 log4j extras 伴侣包括新部署应考虑的替代方案,并在 org.apache.log4j.rolling.RollingFileAppender 的文档中进行了讨论。
    【解决方案2】:

    另外,

    log4j.appender.myAppender=org.apache.log4j.DailyRollingFileAppender
    **log4j.appender.myAppender.DatePattern='.'yyyy-MM-dd-HH**
    

    以下列表显示了 log4j 定义的所有日期模式,

    Minutely  '.'yyyy-MM-dd-HH-mm application.log.2013-02-28-13-54
    Hourly '.'yyyy-MM-dd-HH application.log.2013-02-28-13
    Half-daily '.'yyyy-MM-dd-a application.log.2013-02-28-AM app.log.2013-02-28-PM
    Daily '.'yyyy-MM-dd application.log.2013-02-28
    Weekly '.'yyyy-ww application.log.2013-07 app.log.2013-08 
    Monthly '.'yyyy-MM application.log.2013-01 app.log.2013-02
    

    【讨论】:

      【解决方案3】:

      使用任何滚动文件附加程序要小心的另一件事是确保一次只有一个 JVM 访问特定的日志文件。这是因为 log4j 出于性​​能原因缓存日志文件大小,如果多个 JVM 访问相同的文件,您的“滚动”将会变得不稳定。

      【讨论】:

      • 对不起,“vm”是什么意思?
      • 我的意思是java虚拟机。 “java”可执行文件的每个实例。
      【解决方案4】:

      使用DailyRollingFileAppender

      特别是,将其 'datePattern' 属性设置为 '.'yyyy-MM-dd-HH 会导致文件每小时轮换一次。

      【讨论】:

        【解决方案5】:

        您需要使用DailyRollingFileAppender。尽管名称具有误导性,但它可以配置为在可配置的时间段内运行,最长可达几分钟。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-12-19
          • 2015-08-26
          • 2021-07-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-07
          • 2021-12-22
          相关资源
          最近更新 更多