【问题标题】:Rolling logs by both size and time按大小和时间滚动日志
【发布时间】:2012-12-05 20:08:35
【问题描述】:

我使用RollingFileAppenderlog4j 1.2.16,当日志文件达到一定大小时,它会滚动日志文件。现在我想每天滚动日志文件,当它们达到一定大小时。因此每天会有一个或多个日志文件。

例如,

myapp.log
myapp-17.12.2013.log
myapp-16.12.2012.log
myapp-16.12.2012.1.log
myapp-16.12.2012.2.log

是否有现成的附加程序,它已经完成了吗?

【问题讨论】:

标签: java log4j appender rollingfileappender


【解决方案1】:

确实有两种选择:

  1. 使用 LogBack 及其大小和时间触发策略:http://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedFNATP
  2. 这里有用于 Log4J 的 TimeAndSizeRollingAppender:http://www.simonsite.org.uk/

请记住,这两个选项都使用文件重命名。如果有另一个脚本自动移动这些文件,请仔细考虑这一点。当两个进程处理同一个文件时,文件重命名是有风险的。

我的建议是直接写入模式中的不可变日志文件名:myapp-{dd.MM.yyyy}.{X}.log。这种方式“滚动”只是关闭一个文件并打开一个新文件。没有重命名。没有后台线程。

【讨论】:

    【解决方案2】:

    快速回答是“不”。查看log4j的javadoc:https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/FileAppender.html

    只有两个开箱即用的文件追加器:DailyRollingFileAppender 和 RollingFileAppender(不推荐使用第一个,因为它存在同步问题)。

    要实现您想要的,您应该创建自己的附加程序,扩展 RollingFileAppender 并修改它以在日期更改时滚动文件。修改将在方法中:

     protected void subAppend(LoggingEvent event)
    

    您可以在此处查看其来源:http://www.docjar.com/html/api/org/apache/log4j/RollingFileAppender.java.html(第 274 行)。

    您只需复制并粘贴代码并更改 if 调用 rollOver 以满足您的需要。

    【讨论】:

      【解决方案3】:

      下面的配置 xml 将完成这项工作: 需要 JAR:log4j-rolling-appender-20150607-2059

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
      <log4j:configuration debug="true"
          xmlns:log4j='http://jakarta.apache.org/log4j/'>
          <appender name="file"
              class="uk.org.simonsite.log4j.appender.TimeAndSizeRollingAppender">
              <param name="File" value="D:\\App.log" />
              <param name="Threshold" value="DEBUG" />
              <param name="DatePattern" value=".yyyy-MM-dd" />
              <param name="MaxFileSize" value="1KB" />
              <param name="MaxRollFileCount" value="100" />
              <param name="ScavengeInterval" value="30000" />
              <param name="BufferedIO" value="false" />
              <param name="CompressionAlgorithm" value="GZ" />
              <layout class="org.apache.log4j.PatternLayout">
                  <param name="ConversionPattern" value="%-5p %-23d{ISO8601} [%t] %x: %c{1} - %m%n" />
              </layout>
          </appender>
      
          <root>
              <level value="DEBUG" />
              <appender-ref ref="file" />
          </root>
      
      </log4j:configuration>
      

      【讨论】:

        猜你喜欢
        • 2011-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-10
        • 2010-09-19
        相关资源
        最近更新 更多