Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java log4j-动态地将日志文件压缩到gz_Java_Logging_Log4j - Fatal编程技术网

Java log4j-动态地将日志文件压缩到gz

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

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

您可以尝试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>

您可以创建自己的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文件。你为什么想要这个?