据我所知,Log4Perl 或其在 CPAN 中的任何相关模块都不支持日志文件的旋转和压缩。
旋转可以通过使用来完成:
但是两个模块都不支持旋转和压缩。(Log::Dispatch::FileRotate 在它的待办事项列表中有它,但它目前没有实现)。
可以使用 Linux 中的标准Logrotate工具来执行此操作,方法是使用 Log::Log4perl::Appender::File 的 recreate_check_interval 或 recreate_check_signal。
从最初的测试来看,使用带有delaycompress选项的 Logrotate 似乎可以解决问题——即使在高负载的机器上,一旦文件被移动,log4perl 将继续记录到同一个文件句柄,直到信号被输出。
但是,如果没有使用 delaycompress,并且在日志文件的压缩和 Perl 程序捕获信号之间存在(甚至是轻微的延迟),则可能会丢失一些日志数据。
你怎么看?还有其他我们没有想到的选择吗?