我的要求是获取压缩的每日滚动日志文件,仅保留最后K天。
我知道我可以使用apache-log4j-extras通过压缩获得每日滚动文件 使用此配置:
<appender name="debugFileRolling" class="org.apache.log4j.rolling.RollingFileAppender">
<!-- The active file to log to -->
<param name="file" value="debug.log" />
<param name="append" value="true" />
<param name="encoding" value="UTF-8" />
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="/%d{yyyy-MM-dd}-debug.log.gz" />
</rollingPolicy>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d [%t] %c: %m%n" />
</layout>
</appender>
我可以使用MaxBackupIndex获取滚动文件。但我想把两者结合起来。
所以我的问题是:
是否有一个我可以使用的appender会让我三个:每日滚动,压缩和最大文件。
我知道我可以实现自己的FileAppender
,TriggeringPolicy
或RollingPolicy
,但我想避免这种情况。
答案 0 :(得分:4)
log4j 1.2
没有支持您需要的所有功能的appender。
您必须使用自己的实现。
log4j2
似乎支持您的要求。请查看log4j2文档(http://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender):
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="250 MB"/>
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>