据我所知,CP4中的Log4Perl或其任何相关模块都不支持日志文件的旋转和压缩.
旋转可以通过使用:
登录:: Log4perl :: Appender的::文件
Log :: Dispatch :: FileRotate.
但这两个模块都不支持旋转和压缩.(Log :: Dispatch :: FileRotate在它的待办事项列表中有它,但它目前没有实现).
可以使用Linux中的标准Logrotate工具,使用Log :: Log4perl :: Appender :: File的recreate_check_interval或recreate_check_signal来完成此操作.
从最初的测试中,它看起来像使用日志轮播与delaycompress选项就可以了-即使在高负荷的机器上,因为一旦文件被移动,log4perl将继续记录到同一个文件句柄,直到该信号毫无遗漏.
但是,如果未使用delaycompress,并且压缩日志文件与通过Perl程序捕获信号之间存在(甚至稍有延迟),则某些日志记录数据可能会丢失.
你怎么看?还有其他我们没有想到的选择吗?
多年来,我发现您几乎总是希望使用外部方法来使用Log4perl进行日志文件轮换.您只需避免内部日志旋转不可避免地遇到的许多细微问题(日志延迟,权限问题).
您已经提到了两种在Linux上使用logrotate的方法,为什么不坚持使用它们呢?所述Log4perl FAQ描述了使用newsyslog这是FreeBSD等效的日志轮播,并提供类似的特征.