【发布时间】:2011-03-20 18:04:31
【问题描述】:
是否可以压缩日志文件(我通过 RollingFileAppender 进行)?
【问题讨论】:
-
压缩是什么意思?简化?还是真的压缩,你必须解压?
-
压缩(例如压缩)以存档
标签: java properties log4j
是否可以压缩日志文件(我通过 RollingFileAppender 进行)?
【问题讨论】:
标签: java properties log4j
log4j extras 对此提供支持。
只需将以下内容添加到您的 RollingFileAppender 配置中,并以 .gz 结尾的文件名即可自动压缩您的日志文件:
<appender...>
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="/wombat/foo.%d{yyyy-MM}.gz"/>
</rollingPolicy>
</appender>
更多详情请查看Javadoc
【讨论】:
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
* 仅用于文件。
org.apache.log4j.rolling.RollingFileAppender(来自log4j-extras),而不是org.apache.log4j.RollingFileAppender(来自log4j)!
我知道这并不能完全回答您的问题,但它确实提出了替代解决方案。
我们处理这个问题的方法是在一天结束时运行一个批处理,将之前的所有日志文件压缩到今天的日期,删除一周之前的所有文件,然后将它们复制到另一个文件服务器。这样,应用程序不需要消耗任何 CPU 周期来执行此操作,并且在服务器上我们有不超过一周的日志,而在另一个文件服务器上我们有更旧的日志文件。
【讨论】:
我看到的唯一另一件事是将 log4j 升级到 1.3.15/1.4 以上并使用 TimeBasedRollingPolicy 滚轮启用自动压缩,但这需要从本质上升级 log4j(以及应用程序的兼容性)
Hmmm.. 另一个更好的办法是让 log4j 在文件滚动后执行命令。因此,除了 gzip,我可以使用其他一些压缩逻辑,如 bzip 或 lzop 等。如果我今天在 log4j 中使用此功能,那将是另一种方法。
【讨论】:
试试 Log4j v2.x
我得到了这个很好的答案,但随后继续调查了一下,log4j 2 出来了!
现在您可以使用基本库进行压缩,还有更多……太棒了!
RollingFileAppender - 我正在寻找同时具有 timeBased 和 sizeBased 滚动的东西,并且具有压缩功能......它两者都有!我可以删除我的 syslog4j 库,因为这个也有!
请不要使用 log4j 1.2 + extras,除非你真的必须这样做。
【讨论】: