核心是使用 rotate n 指令控制最多保留 n 个归档副本(如 .1、.2),超出数量的最老文件自动删除;rotate 0 表示不保留旧日志,rotate 1 仅留一个历史副本;其实际保留时长取决于轮转频率(如 daily + rotate 14 通常保留14天),可叠加 maxage 实现天数硬约束。

限制 logrotate 保留的历史日志文件数量,核心是使用 rotate N 指令,它明确控制最多保留多少个归档副本(如 app.log.1、app.log.2 等),超出数量的最老文件会被自动删除。
正确设置 rotate 参数
在配置块中直接写入 rotate 数字 即可生效,例如:
-
rotate 7→ 最多保留 7 个轮转后的日志文件(如 .1 到 .7) -
rotate 0→ 不保留任何旧日志,轮转后立即删除(只留当前app.log) -
rotate 1→ 只留一个历史副本(app.log.1),再轮转时先删掉它再生成新的
注意轮转频率与 rotate 的关系
rotate 本身不决定“保留几天”,而是保留“几个文件”。实际保留时长取决于轮转触发频率:
- 配
daily+rotate 14→ 通常保留最近 14 天的日志(每天轮转一次) - 配
weekly+rotate 4→ 通常保留最近 4 周的日志 - 若某天未轮转(如服务停机),rotate 仍按文件数量清理,可能跨时长更久——这时建议叠加
maxage
避免常见冲突配置
以下配置会干扰或覆盖 rotate 的效果,需谨慎使用:
-
compress和delaycompress:启用后归档文件名带.gz后缀,但不影响 rotate 计数逻辑;不过rotate 0时必须禁用 compress,否则报错或行为异常 -
maxage N:按修改时间强制清理超期文件,与 rotate 叠加生效(取更严格者),适合对保留天数有硬性要求的场景 - 不要混用
copytruncate和create在同一配置中,二者机制不同,易导致日志丢失或重复写入
验证是否生效
改完配置后,用调试模式确认行为:
-
logrotate -d /etc/logrotate.d/your-app查看模拟执行过程,重点观察 “removing old log” 或 “rotating log” 行 -
logrotate -f /etc/logrotate.d/your-app强制执行一次,然后检查/var/log/...目录下归档文件数量是否符合预期 - 定期运行
ls -lt /var/log/your-app/*.log*观察文件列表变化











