log4j - 将日志文件压缩到gz上

时间:2013-05-21 20:19:26

标签: java logging log4j

是否可以设置log4j来创建gziped日志文件而无需创建中间.log文件?有几种滚动策略(按日期滚动等),但它们首先创建解压缩文件。

3 个答案:

答案 0 :(得分:3)

您可以创建自己的Appender,扩展org.apache.log4j.RollingFileAppender并覆盖 通过实现您自己的优化实现版本来实现当前逻辑。压缩当前文件并丢弃将其滚动到另一个日志文件(RollingFileAppender的默认实现)。例如:

log4j.appender.{name}=br.com.sample.MyZipRollingFileAppender

您可以使用java.util.zip.ZipOutputStream或java.util.zip.GZIPOutputStream“google”并搜索实施示例,以压缩当前文件。

答案 1 :(得分:1)

使用此Writer可以解决此任务:http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/coyote/http11/filters/FlushableGZIPOutputStream.html 和像

这样的代码
Writer writer = new OutputStreamWriter(new FlushableGZIPOutputStream(newFileOutputStream(logFileName), LINES_TO_FLUSH));
appender.setWriter(writer);

它有效,但有一些缺点:压缩较低,并不总是可以解压缩此文件。所以我又回到了轮换阵容。

答案 2 :(得分:0)

您可以尝试org.apache.log4j.rolling.TimeBasedRollingPolicy:

<appender...>
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
      <param name="FileNamePattern" value="/wombat/log.%d{yyyy-MM}**.gz**"/>
    </rollingPolicy>
</appender>
相关问题