logrotate 使用日期重命名文件

logrotate 使用日期重命名文件

现在,logrotate 将旧日志文件重命名为 access.log.1.gz、access.log.2.gz 等。我更希望它将它们命名为 access.log.20090714.gz、access.log.20090715.gz 等 - 每天一个。

我找不到任何为旧日志文件指定文件名模式的选项。你知道怎么做吗?

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

答案1

/etc/logrotate.conf或中/etc/logrotate.d/lighttpd,或者在其他任何地方的适当文件中,添加dateext到您想要应用日期后缀的节。

更多信息来自logrotate 手册页

日期文本

存档旧版本的日志文件,并添加每日扩展名(如 YYYYMMDD),而不是简单地添加数字。

答案2

使用 cronolog - 它会首先使用正确的文件名写入日志文件(例如,我通常让我的 Web 服务器以 YYYY/MM/DD/access 或 YYYY/MM/DD/error 等格式写入日志文件)。有关使用 lighttpd 配置 cronolog 的更多详细信息请参见此处:http://redmine.lighttpd.net/projects/1/wiki/MigratingFromApache

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

答案3

我认为 lighttpd 或 logrotate 无法自行完成此操作。我看到两种方法可以实现此目的:

在 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 可以按日期构建日志文件,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 配置中设置accesslog.use-syslog& 。server.errorlog-use-syslog


编辑:Cronolog 比我的任何一个建议都更简单,如果它对你有用,我会选择它。

相关内容