按大小和时间滚动日志

时间:2012-12-18 15:18:32

标签: java log4j appender rollingfileappender

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

例如,

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

是否有一个现成的appender,它已经做到了吗?

3 个答案:

答案 0 :(得分:8)

确实有两种选择:

  1. 使用LogBack及其大小和时间触发策略:http://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedFNATP
  2. 此处有Log4J的TimeAndSizeRollingAppender:http://www.simonsite.org.uk/
  3. 请注意,这两个选项都使用文件重命名。如果有另一个脚本自动移动这些文件,请仔细考虑这一点。当两个进程处理同一个文件时,文件重命名是有风险的。

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

答案 1 :(得分:3)

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

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

要实现您想要的功能,您应该创建自己的appender,扩展RollingFileAppender并修改它以在日期更改时滚动文件。修改将采用方法:

 protected void subAppend(LoggingEvent event)

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

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

答案 2 :(得分: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>