你喜欢哪种日志旋转工具?
根据我的经验,logrotate很棒。 这是非常灵活的,并与大多数软件运作良好。
然而,它有一些问题,作为cronolog主要是一个networking日志轮换设施,我会用logrotate + apache写下我的经验是有问题的:
在旋转日志时,我们必须通知apache日志正在轮换,即使logrotate将access.log重命名为access.log.1,apache将继续写入access.log.1,因为它正在写入inode,并且重命名文件不会影响inode编号。
在Debian的蚀刻(可能还有其他许多发行版),logrotate被用来旋转apache日志。 现在,apache有一个优雅的重启 ,build议apachesubprocess在完成现有连接的服务后退出,然后apache重新读取它的configuration,产生新的subprocess,开始写入新的日志文件(如果前一个是旋转)。
这听起来像一个很好的解决scheme,然而,优雅的重新启动并不总是在某些条件下工作(如重负载),所以debian开发人员决定在apache logrotateconfiguration中使用apache重新启动,而不是一个正常的重新启动。 不幸的是,这会导致所有连接立即被丢弃,这对于重负载的站点是非常不利的。 另外,apache重新启动也可能导致像apache停止和不启动(也在某些负载情况下)的问题,请参阅下面的错误链接以获取详细信息。
底线是,logrotate是伟大的,但可能导致某些程序的某些问题。 我没有太多关于cronolog的经验,但是因为它通过pipe道写日志,所以当它旋转日志文件时,不需要任何apache重新加载,这基本上解决了上述的所有问题。
相关logrotate / apache debian bugs:
我更喜欢cronolog,但它不是一个真正的强烈的偏好。
logrotate从哪里开始由cron,并且如果一个系统由于某种原因当旋转应该发生了,那么你的日志文件将不会被旋转。
我也喜欢让日志文件中包含date(%Y%m.combined.access.log),因为我将这些日志保留了很长时间。 在大多数系统中,默认情况下,apache logrotate会将这些文件命名为access.log,access.log.1等。 有可能使用logrotate在日志文件中使用date,但是我无法弄清楚上次我查看的方式。
只有使用过logrotate。 这是Debian默认使用的,我从来没有任何抱怨。
我几乎完全使用cronolog不是logrotate 。 logrotate附带了Debian,并允许它继续为系统服务工作,如邮件服务器日志。 但是对于Apache和lighttpd日志文件,这是所有的cronolog 。
我使用cronolog的原因之一是所有configuration都发生在Web服务器configuration的日志文件行中
例如在一个lighttpdconfiguration文件中,你可以把:
accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%W-access.log"
而且每个星期都会得到一个新的日志文件,没有任何其他configuration。 或者你可以创造性地做类似的事情:
accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%m/%a-access.log"
并获得一个日志文件,显示一周中的一天的stream量。 例如星期天,所有星期二。
更好的是,即使服务器停机了一段时间,重新启动时也会使用正确的日志文件。