logrotate 通过启用 dateext 选项并配合 dateformat 实现按日期归档,如 app.log-2024-10-05;需避免与数字轮转冲突,且日期基于轮转时系统时间。

启用 dateext 并指定日期格式
默认情况下 logrotate 按数字后缀轮转(如 app.log.1、app.log.2)。要改用日期后缀(如 app.log-20241005),需在配置中添加:
-
dateext:启用日期后缀(默认使用
YYYYMMDD格式) -
dateformat:自定义日期格式,例如
%Y-%m-%d→app.log-2024-10-05
注意:dateformat 前必须有 dateext,且不能包含空格或特殊字符(推荐只用字母、数字、短横线和下划线)。
配置示例(/etc/logrotate.d/myapp)
假设应用日志路径为 /var/log/myapp/app.log,希望每日轮转并按 YYYY-MM-DD 归档:
/var/log/myapp/app.log {
daily
missingok
rotate 30
compress
delaycompress
dateext
dateformat -%Y-%m-%d
create 0644 root root
sharedscripts
postrotate
systemctl reload myapp.service > /dev/null 2>&1 || true
endscript
}
执行后,当天轮转生成的归档文件名类似:app.log-2024-10-05;第二天生成 app.log-2024-10-06,依此类推。
触发与验证方法
logrotate 通常由 cron 每天自动运行(如 /etc/cron.daily/logrotate)。手动测试可用:
-
logrotate -f /etc/logrotate.d/myapp(强制立即轮转) -
logrotate -d /etc/logrotate.d/myapp(调试模式,不实际执行,只显示将做什么)
轮转后检查目标目录:ls -l /var/log/myapp/app.log*,应能看到带日期后缀的归档文件。
注意事项
日期后缀基于轮转发生时的系统时间,不是日志内容中的时间戳;若日志写入频繁且跨日未轮转,不会自动补全旧日期归档。确保:
- 系统时间准确(建议启用 NTP 同步)
- 配置中未同时使用
rotate数字后缀和dateext冲突(logrotate 会优先用日期) - 若需保留原始日志名(如
app.log)不变,dateext是安全选择——它只影响归档文件,不改动当前活跃日志











