2010-07-25 159 views
34

是否可以压缩日志文件(我通过RollingFileAppender进行)?压缩Log4j文件

+0

compres是什么意思?简化?还是真的压缩,你必须解压缩? – 2010-07-25 13:44:33

+0

压缩(压缩,例如)归档 – 2010-07-25 14:01:45

回答

37

log4j extras有这种支持:

只需添加以下到您的RollingFileAppender进行配置并具有。广州文件名末尾它将自动压缩你的日志文件:

<appender...> 
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> 
     <param name="FileNamePattern" value="/wombat/foo.%d{yyyy-MM}.gz"/> 
    </rollingPolicy> 
</appender> 

检查这里的一些细节在javadoc:

http://logging.apache.org/log4j/companions/extras/apidocs/org/apache/log4j/rolling/TimeBasedRollingPolicy.html

希望帮助

+11

我如何将它添加到属性文件? >'log4j.appender.DefaultLog = org.apache.log4j.RollingFileAppender log4j.appender.DefaultLog.File = $ {mailbox.root} /logs/application.log log4j.appender.DefaultLog.MaxFileSize = 50MB log4j.appender .DefaultLog.MaxBackupIndex = 100 log4j.appender.DefaultLog.layout = org.apache.log4j.PatternLayout log4j.appender.DefaultLog.layout.ConversionPattern =%d%p [%c] - %m%n' – MiKu 2010-10-19 14:45:35

+1

什么是**为? – imdhmd 2012-12-19 07:21:54

+0

这就是你如何在Java中指定通配符来包含目录,而不是'*',它仅用于文件。 – hd1 2013-03-01 00:55:57

2

我知道这并不完全回答你的问题,但它确实提出了一种替代解决方案。

我们处理这个问题的方式是在一天结束时运行一个批处理过程,将以前的任何日志文件压缩到今天的日期,摆脱一周之前的任何日志文件,然后将它们复制到另一个文件服务器。通过这种方式,应用程序不需要消耗任何CPU周期,而在服务器上,我们拥有不超过一周的日志,而在另一台文件服务器上,我们拥有较早的日志文件。

1

我看到的唯一的其他事情是将log4j升级到1.3.15/1.4以上版本,并使用TimeBasedRollingPolicy滚轮启用自动压缩,但这需要本质上升级log4j(以及该应用的兼容性)

嗯..可能是另一个更好的事情就是让log4j在文件滚动后执行命令。因此,而不是gzip,我可以使用其他压缩逻辑,如bzip或lzop等。如果我今天在log4j中拥有这个工具,那将是另一种方法。

16

我遇到了这个伟大的答案,但后来不断调查了一下,log4j 2出来了!

现在,您可以使用基本库进行压缩以及更多...这只是真棒!

RollingFileAppender - 我正在寻找既有timeBased又有sizeBased滚动的东西,并且有压缩......它有两个!我可以放弃我的syslog4j库,因为这个库也有它!

请不要使用log4j 1.2 + extras,除非你真的必须这样做。

+0

我同意。现在我们在log4j 2中拥有它的标准是非常棒的,但截至评论发布时,log4j 2处于测试阶段。尽管如此,我仍然鼓励任何能够使用该测试版的人在发布之前帮助改进它。 – 2013-09-09 21:22:28

+0

是的,测试版计划在六月结束,但它仍然在进行......很可惜。它对我来说工作得很好,但政策规定在生产中没有测试代码。 – Daren 2013-09-10 07:54:46