logrotate 的 dateext 参数启用后,日志归档文件名末尾自动添加日期后缀(如 .2024-10-25),取代数字序号;需配合 dateformat 指定格式(如 .%Y-%m-%d),且仅在 dateext 存在时生效。

Logrotate 的 dateext 参数能自动在归档日志文件名末尾添加日期后缀(如 .20241025),替代默认的数字序号(如 .1, .2),极大提升历史日志的可读性与定位效率。
启用 dateext 并设置日期格式
默认情况下,dateext 使用 %Y%m%d 格式(如 app.log.20241025)。若需自定义,必须配合 dateformat 使用:
- 仅写
dateext:启用日期后缀,使用默认格式 - 必须同时写
dateformat %Y-%m-%d才能改成带分隔符格式(如app.log.2024-10-25) -
dateformat仅在dateext启用时生效,单独写无效 - 支持的格式符与
strftime()一致,例如:%Y(4位年)、%m(月)、%d(日)、%H(小时)等
配置示例(/etc/logrotate.d/myapp)
以下配置将每天轮转 /var/log/myapp/app.log,保留 30 天,文件名含 YYYY-MM-DD 后缀:
/var/log/myapp/app.log {
daily
missingok
rotate 30
compress
delaycompress
dateext
dateformat -%Y-%m-%d
create 644 root root
sharedscripts
postrotate
systemctl kill -s USR1 myapp.service > /dev/null 2>&1 || true
endscript
}
注意:dateformat 值前面的短横 - 会直接拼接到文件名中,所以写 -%Y-%m-%d 得到的是 app.log-2024-10-25;若想用点号分隔,应写 .%Y-%m-%d,结果为 app.log.2024-10-25。
关键注意事项
- 启用
dateext后,logrotate 不再使用数字后缀(如.1),因此rotate N表示“保留最近 N 个日期的归档”,不是“保留 N 个文件” - 如果某天未触发轮转(例如日志无新内容且未达 size 条件),当天不会生成带日期的归档文件
- 已有数字后缀的旧归档(如
app.log.1)不会被自动重命名,需手动清理或迁移 - 测试配置是否生效:运行
logrotate -d /etc/logrotate.d/myapp(调试模式不实际执行),观察输出中是否出现dateext和预期的日期字符串
验证与排查
轮转后检查归档文件名:
$ ls -t /var/log/myapp/app.log* /var/log/myapp/app.log.2024-10-25 /var/log/myapp/app.log.2024-10-24 /var/log/myapp/app.log
若仍看到 .1、.2 等数字后缀,常见原因有:
– 配置文件未被 logrotate 加载(检查 /etc/logrotate.conf 中是否包含 include /etc/logrotate.d)
– dateext 行缩进错误或拼写错误(必须顶格,且大小写敏感)
– 存在其他同名配置覆盖了当前设置(logrotate 按字母顺序加载,后加载的可能覆盖先加载的)


















