Answers:
以我的经验,logrotate很棒。它非常灵活,并且可以与大多数软件配合使用。
但是,它存在一些问题,并且因为cronolog主要是Web日志轮换工具,所以我将写下我在logrotate + apache方面遇到的问题:
旋转日志时,我们必须通知apache日志正在旋转,即使logrotate将access.log重命名为access.log.1,apache仍将继续写入access.log.1,因为它正在写入inode,并且重命名文件不会影响索引节点号。
在debian etch(可能还有许多其他发行版)上,logrotate用于旋转apache日志。现在,apache可以正常重启,建议apache子进程在完成为现有连接的服务后退出,然后apache重新读取其配置,生成新的子进程,这些子进程开始写入新的日志文件(如果以前的文件是旋转)。
这听起来像是一个很好的解决方案,但是平稳重启在某些情况下(例如重负载)并不总是起作用,因此debian开发人员决定在apache logrotate配置中使用apache重启而不是平稳重启。不幸的是,这会导致所有连接立即被丢弃,这对于负载较重的站点而言非常糟糕。此外,重新启动apache还会导致apache停止和不启动(在某些负载情况下)之类的问题,有关详细信息,请参见下面的错误链接。
最重要的是,logrotate很好,但是可能导致某些程序出现某些问题。我对cronolog没有太多经验,但是因为它通过管道写入日志,所以在旋转日志文件时不需要任何apache重装,这基本上解决了上面描述的所有问题。
相关的logrotate / apache debian错误:
我更喜欢cronolog,但这并不是一个很强的偏好。
logrotate由cron启动的位置,并且如果由于某种原因导致系统停机时应该进行轮换,则不会轮换您的日志文件。
我还喜欢让日志文件的名称中带有日期(%Y%m.combined.access.log),因为我将这些日志保留了很长时间。在大多数系统上,默认情况下,apache logrotate会将文件命名为access.log,access.log.1等。可以在logfile中使用带logrotate的日期,但我上次不知道该怎么做。
我几乎完全用完cronolog
了logrotate
。
logrotate
随Debian一起提供,我允许它继续为邮件服务器日志之类的系统服务工作。但是,对于Apache和lighttpd
日志文件,仅此而已cronolog
。
我使用的原因之一cronolog
是所有配置都在Web服务器配置的日志文件行中进行
例如在lighttpd
配置文件中,您可以输入:
accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%W-access.log"
所有人每周都会获得一个新的日志文件,而无需进行任何其他配置。或者,您可以发挥创造力,并执行以下操作:
accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%m/%a-access.log"
并获取一个按星期几显示流量的日志文件。例如,所有星期日,所有星期二。
更好的是,即使服务器关闭了一段时间,重启后仍将使用正确的日志文件。