logrotate 是控制 Apache 日志保留策略的核心工具,通过配置 rotate、size、compress 等参数实现按天/大小轮转、压缩归档与自动清理,配合 olddir 和权限设置保障安全高效。

Apache 日志切割本身不负责保留多少份日志,它只管“切”;真正控制保留策略、压缩、清理旧档的,是 logrotate —— 这才是防止历史日志无限堆积的核心工具。
用 logrotate 设置保留天数与自动清理
在 /etc/logrotate.d/httpd(或 /etc/logrotate.d/apache2)中配置规则,例如:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- daily:每天轮转一次
- rotate 14:只保留最近 14 份日志(如 access.log.1 到 access.log.14),超出的自动删除
- compress + delaycompress:归档时压缩(.gz),但最新一轮先不压,方便排查
- missingok:日志文件临时缺失也不报错
- notifempty:空文件不轮转
- create 0644 apache apache:新日志权限和属主设好,避免写入失败
- postrotate … endscript:轮转后执行 systemctl reload httpd,让 Apache 重新打开新日志文件
按大小+数量双保险(适合高流量场景)
单靠时间轮转可能不够——某天突发流量,一天就生成几十GB。可改用 size 触发,并配合 rotate 限制份数:
- size 100M:日志达 100MB 就立即轮转
- rotate 5:最多只留 5 个归档(含当前正在写的),避免磁盘被撑爆
- 搭配 olddir /var/log/httpd/archive 可把旧日志移到单独目录,进一步隔离风险
手动清理作为兜底(慎用)
logrotate 失效或需临时清理超期日志时,可用 find 命令,但务必加 -dry-run 先测试:
- 查出 90 天前的 .log 或 .log.gz 文件:find /var/log/httpd -name "*.log*" -type f -mtime +90
- 确认无误后才执行删除:find /var/log/httpd -name "*.log*" -type f -mtime +90 -delete
- 注意:不要直接删正在写的日志文件(如 access.log),应交由 logrotate 处理,否则可能丢日志或占磁盘空间不释放
关键提醒
- rotatelogs 和 cronolog 是“实时切分”,不管理保留份数;它们生成的带日期的文件(如 access_20260820.log)仍需 logrotate 统一归档压缩
- 若用 dateext(如 logrotate 的 dateext 选项),文件名会自动带日期,比数字序号更易追溯
- 所有日志目录(/var/log/httpd 等)要确保权限合理(如 750),属主为 Apache 运行用户(apache 或 www-data)

















