是否可以设置 log4j 来创建压缩日志文件而不创建中间 .log 文件?有几种滚动策略(按日期滚动等),但它们首先创建解压缩文件。
问问题
5529 次
3 回答
3
您可以创建自己的 Appender 扩展 org.apache.log4j.RollingFileAppender 并通过实现您自己的优化实现版本来覆盖当前逻辑。压缩当前文件并放弃将其滚动到另一个日志文件(RollingFileAppender 的默认实现)。例子:
log4j.appender.{name}=br.com.sample.MyZipRollingFileAppender
您可以“google”并使用 java.util.zip.ZipOutputStream 或 java.util.zip.GZIPOutputStream 搜索实现示例来压缩当前文件。
于 2013-05-21T20:36:56.257 回答
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);
它可以工作,但有一些缺点:压缩率较低,并且并不总是可以解压缩此文件。所以我回到了轮换。
于 2013-08-09T09:55:42.327 回答
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>
于 2013-05-21T20:35:43.557 回答