Java log4j-动态地将日志文件压缩到gz
是否可以设置log4j来创建gzip日志文件,而不创建中间的.log文件?有几种滚动策略(按日期滚动等),但它们首先创建解压缩文件。您可以尝试org.apache.log4j.rolling.TimeBasedRollingPolicy:Java log4j-动态地将日志文件压缩到gz,java,logging,log4j,Java,Logging,Log4j,是否可以设置log4j来创建gzip日志文件,而不创建中间的.log文件?有几种滚动策略(按日期滚动等),但它们首先创建解压缩文件。您可以尝试org.apache.log4j.rolling.TimeBasedRollingPolicy: <appender...> <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> <param name="FileNa
<appender...>
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="/wombat/log.%d{yyyy-MM}**.gz**"/>
</rollingPolicy>
</appender>
您可以创建自己的Appender扩展org.apache.log4j.RollingFileAppender并覆盖 通过实现您自己的优化实现版本来更改当前逻辑。压缩当前文件并放弃将其滚动到另一个日志文件(RollingFileAppender的默认实现)。例如:
log4j.appender.{name}=br.com.sample.MyZipRollingFileAppender
您可以使用java.util.zip.ZipOutputStream或java.util.zip.GZIPOutputStream“google”和搜索实现示例来压缩当前文件。使用此编写器可以解决此任务: 还有像这样的代码
Writer writer = new OutputStreamWriter(new FlushableGZIPOutputStream(newFileOutputStream(logFileName), LINES_TO_FLUSH));
appender.setWriter(writer);
它可以工作,但也有一些缺点:压缩较低,并且不总是能够解压缩此文件。因此,我又回到了轮换阶段。log4j根据您的滚动周期生成日志。我认为没有任何策略可以满足您的需要。您必须手动完成此操作,您至少需要当前日志,因为即使您制作了自己的附加器,直接写入压缩文件也会很昂贵。您必须将日志保存在内存中(Jvm停止时会有风险),然后写出zip文件。你为什么想要这个?