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