通过规模和时间滚动日志(Rolling logs by both size and time)

2019-07-05 16:47发布

我用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

有没有一种现成的,现成的appender,这确实它已经?

Answer 1:

确实有两个选项:

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

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

我的建议是直接写入模式不变的日志文件名:myapp- {} DD.MM.YYYY {X}日志。 这样,“滚动”被简单地关闭一个文件,并打开一个新的。 没有重命名。 没有后台线程。



Answer 2:

简单的回答是“不”。 综观的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)。

你只需要复制和粘贴代码和改变,如果在调用侧翻,以满足您的需求。



Answer 3:

下面配置XML将做的工作:JAR要求:log4j的,滚动的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>


文章来源: Rolling logs by both size and time