据我所知,Log4Perl或CPAN中的任何相关模块都不支持日志文件的旋转和压缩。
旋转可以通过以下方法来完成:
但这两个模块都不支持旋转和压缩。(Log::分派::FileRotate将其包含在其待办事项列表中,但目前尚未实现)。
通过使用日志::Log4perl::对数旋转::File的recreate_check_interval或recreate_check_signal,可以在Linux中使用标准的recreate_check_signal工具来实现这一点。
从最初的测试来看,使用带有延迟压缩选项的对数旋转可以完成任务--即使在负载很高的机器上也是如此,因为一旦文件被移动,log4perl就会继续登录到相同的文件句柄上,直到信号正常为止。
但是,如果不使用延迟压缩,并且日志文件的压缩与Perl程序捕获信号之间存在(甚至是轻微的延迟),则可能会丢失一些日志数据。
你认为如何?还有其他我们没有想到的选择吗?
发布于 2009-05-27 17:40:57
多年来,我发现您几乎总是希望使用外部方法来使用Log4perl来旋转日志文件。您只需避免内部日志不可避免地遇到的许多微妙问题(日志延迟、权限问题)。
您已经提到了两种在Linux上使用日志旋转的方法,为什么不继续使用它们呢?Log4perl常见问题描述使用newsyslog提供了类似的特性,它是FreeBSD等效于log旋转式的。
发布于 2009-02-09 02:01:03
您是否考虑过使用Log::分派::FileRotate的维护人员来添加缺少的特性和您需要的特性?毕竟它是开源的。:)
如果您不想自己处理这个问题,那么有各种各样的CPAN支持顾问为您提供这种服务。
发布于 2009-02-13 16:17:15
按照这里的建议,我联系了日志::分派::FileRotate的作者,他解释了为什么还没有在Log::调度::FileRotate中实现压缩的原因。
基本上,压缩后的旋转,可能会阻止运行过程,在压缩过程中,这是相当昂贵的。
建议的选项是允许日志::调度::FileRotate的用户在文件旋转后执行任意应用程序,从而在另一个非阻塞进程中执行该应用程序。
另一个建议是让文件系统触发器(如inotify)在主进程关闭写入文件时触发压缩。
另一个建议是编写通过gzip管道压缩的日志文件,或者编写perl gzip模块之一。这是可行的,但会导致一些问题(grep/less)无法工作。zgrep和zless可以工作,但是zgrep在显示gzip文件时给出了一个丑陋的警告,而gzip文件仍然可供编写。在文件上使用"tail“也不起作用,所以这个选项是不切实际的。
https://stackoverflow.com/questions/526446
复制相似问题