【问题标题】:Log4j daily rotation and monthly retention with any file appender使用任何文件附加程序的 Log4j 每日轮换和每月保留
【发布时间】:2020-02-10 00:19:01
【问题描述】:

是否可以使用任何 log4j 附加程序写入具有特定轮换时间和保留限制的日志。
目标是:

  • 每天都有一个日志文件;在午夜创建一个新文件 新日志
  • 保留日志文件并自动删除它们 一定时间后;所以删除早于 X 天(例如 30 天)的日志文件

似乎可以进行轮换,但log4j无法限制保留时间

log4j 版本是 1.2。

【问题讨论】:

    标签: java logging log4j retention


    【解决方案1】:

    这个 log4J 属性对我有用

    log4j.rootLogger=DEBUG, stdout, file
    
    # Redirect log messages to console
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    
    # Redirect log messages to a log file, support file rolling.
    log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.file.File=/opt/cronjob/logs/cronlogs.log
    log4j.appender.file.MaxFileSize=1028MB
    log4j.appender.file.MaxBackupIndex=10
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    

    【讨论】:

      【解决方案2】:

      我的回答是基于logback,而不是log4j(很抱歉给您造成混淆......)


      您可以使用TimeBasedRollingPolicy 实现日志轮换。

      例如)

      <appender name="SYSTEMLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>./logs/system.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
          <fileNamePattern>./logs/system.log.%d{yyyy-MM-dd}</fileNamePattern>
          <!-- keep last 30 days of logs -->
          <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
          <charset>UTF-8</charset>
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %msg %n</Pattern>
        </encoder>
      </appender>
      

      它将在午夜轮换,并将删除超过 30 天的日志文件。

      fileNamePattern:根据fileNamePattern的值推断翻转周期

      maxHistory:可选的 maxHistory 属性控制要保留的存档文件的最大数量,异步删除旧文件。例如,如果您指定每月翻转,并将 maxHistory 设置为 6,则将保留 6 个月的存档文件,而 6 个月之前的文件将被删除。请注意,由于旧的归档日志文件已被删除,因此任何为归档日志文件而创建的文件夹都将被删除。

      您可以在TimeBasedRollingPolicy查看更多信息

      【讨论】:

      • @PaulEdison 只是好奇,这些配置不起作用吗?
      • 这个解决方案是基于logback而不是log4j
      • 哇....@benbenw 是正确的!我不明白为什么我把这个问题误解为 logback .....谢谢你提醒我。请参考他/她对 log4j 的回答。
      【解决方案3】:

      是的,我们可以!

      文件:project-&gt;src-&gt;main-&gt;resources-&gt;logback.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <configuration scan="true">
      
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
          <file>folderName/logFile.log</file>
          <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>folderName/archive/logFile.%d{dd-MM-yyyy}.log</fileNamePattern>
            <!-- keep last 30 days of logs -->
            <maxHistory>30</maxHistory>
          </rollingPolicy>
      
          <!-- filter by level (optional) -->
          <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
          </filter>
      
          <encoder>
            <pattern>%date %-5level [%thread] %file:%L [%M] - %msg%n</pattern>
          </encoder>
        </appender>
      
        <!-- you can filter by type of level (optional) -->
        <root level="DEBUG">
          <appender-ref ref="FILE"/>
        </root>
      </configuration>
      

      有关更多信息,请参阅文档:TimeBasedRollingPolicy

      JavaDoc:TimeBasedRollingPolicy

      【讨论】:

        【解决方案4】:

        大部分答案都是基于 logback。但问题是关于 log4j 1.2(旧...)

        提到 DailyRollingFileAppender 的答案也不起作用。 org.apache.log4j.DailyRollingFileAppender 不支持 MaxBackupIndex 属性参见 http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html (这是用于 RollingFileAppender

        您可能对以下内容感兴趣: Use MaxBackupIndex in DailyRollingFileAppender -log4j

        以及一个可能的答案: Log4j Rollingpolicy and MaxbackupIndex

        但您可能应该使用 slf4j log4j“仿真”(http://www.slf4j.org/legacy.html#log4j-over-slf4j) 并通过 logback(无需任何代码更改)将您的日志路由到更容易实现的地方。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-25
          • 2011-06-18
          • 2021-07-11
          • 2015-03-24
          • 2011-06-06
          • 2013-05-19
          相关资源
          最近更新 更多