logrotate用date重命名文件

现在,logrotate将旧的日志文件重命名为access.log.1.gz,access.log.2.gz等。我更喜欢将它命名为access.log.20090714.gz,access.log.20090715.gz,等 – 每一天一个。

我找不到为旧的日志文件指定文件名模式的任何选项。 你知道如何做到这一点?

顺便说一句,这是为了旋转lighttpd日志文件,如果这件事。

/etc/logrotate.conf或者/etc/logrotate.d/lighttpd ,或者是其他地方的正确文件,将dateext添加到要应用date后缀的节中。

更多信息从logrotate手册页 :

dateext

存档旧版本的日志文件,添加像YYYYMMDD这样的日常扩展,而不是简单地添加一个数字。

使用cronolog – 它将写在日志文件中正确的文件名(例如,我通常有我的networking服务器写日志文件为YYYY / MM / DD /访问,或YYYY / MM / DD /错误,等等)。 有关使用lighttpdconfigurationcronolog的更多详细信息,请访问: http : //redmine.lighttpd.net/projects/1/wiki/MigratingFromApache

(虽然该页面提到server.errorlog不能通过cronolog运行,似乎有一个错误报告,这已被标记为“固定” – 不幸的是,我不能发布一次以上的URL,因为我是serverfault上的“新”用户…)

我不认为lighttpd或logrotate可以自己做到这一点。 我看到两个select来实现这一点:

在logrotate之后直接做自己的脚本,就像cronjob的末尾一样。 就像是:

 if [ -f /var/log/lighttpd/access.log.1.gz ]; then` mv /var/log/lighttpd/access.log.1.gz /var/log/lighttpd/access.log.$date.gz fi 

或者,syslog-ng可以按date构build日志文件,lighttpd可以将日志发送到syslog而不是自己写入。

 # syslog-ng.conf destination df_lighttpd { file("/var/log/lighttpd/$YEAR$MONTH$DAY.log"); }; filter f_lighttpd { program("lighttpd"); }; log { source(s_all); filter(f_lighttpd); destination(df_lighttpd); }; 

并在lighttpd conf中设置accesslog.use-syslogserver.errorlog-use-syslog


编辑: Cronolog是比我的build议更简单和/或者,如果它适用于你,我会去。