Apache日志旋转:logrotate与rotatelogs vs chronolog

我一直在研究我的服务器的日志轮换主机〜5个相当高的stream量站点。 从我可以告诉,我的select是使用logrotate或使用旋转日志或chronologpipe道日志logging。

logrotate需要重新启动apache,并且SIGHUP和SIGUSR1重新启动在高stream量站点上都不太理想,因为要么放弃一堆连接,要么延迟压缩旧日志,直到所有subprocess自然死亡。 另外,如果启用压缩,停机时间可能非常重要。 将使用logrotate – 没有压缩和平稳的重新启动 – 事后压缩旧日志是最大限度地减less停机时间的最佳方式?

chronolog和rotatelogs听起来很有希望,但没有很好的文档。 我无法find与虚拟机特定日志结合使用的示例。 该chronolog网站说:“当扩展的文件名更改,当前文件被closures,并打开一个新的。 这是全球性的吗? 或者是每个AccessLog,CustomLog或ErrorLog指令?

chronolog和rotatelog之间有明显的区别吗?

我认为由apache写入文件的日志是稳定性方面的首选解决scheme。 想象一下,如果你的系统日志会closures,或者pipe道命令会出现错误,会发生什么?

为什么不写你自己的旋转脚本? 您可以使用以下algorithm来避免数据丢失和停机。

假设你需要旋转文件big_access_log

  1. 将big_access_log重命名为.big_access_log_rotating
  2. 发送HUP信号给apache。 它会重新打开(重新创build)big_access_log。
  3. 使用任何你喜欢的工具压缩.big_access_log_rotating。

就个人而言,我只是使用logrotate,我不关心一些可能会丢失的数据,但我认为logrotate足够聪明,以primefaces方式进行旋转。

如果您将Apache设置为通过syslog进行日志logging,并使用rsyslog来处理日志logging,则可以将rsyslogconfiguration为将日志发送到根据当前date命名的文件。 这将消除重新启动Apache的需要,并且您可以轻松地将较旧的日志文件移开。

查看以下网站获取更多信息:

http://wiki.rsyslog.com/index.php/Working_Apache_and_Rsyslog_configuration

http://wiki.rsyslog.com/index.php/DailyLogRotation

你可以做的另一件事是设置cronjob,执行以下操作:

/usr/bin/find /path/to/logs -name access.log | \ /usr/bin/sort | \ /usr/bin/head --lines=-1 | \ /usr/bin/xargs -r /usr/bin/bzip2 -9 

这假设未压缩的访问日志可以按照时间顺序sorting。 最后一行(这将是当前日志)被省略,剩下的日志文件被压缩。 如果没有,则xargs上的-r标志表示该命令将不会运行。

如果需要,可以进一步调整以同时压缩多个日志