6

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

4

3 回答 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 回答