apache日志切割用logrotate实现,关键在于正确编写/etc/logrotate.d/下的配置文件、确认系统默认日志路径(ubuntu为/var/log/apache2/,centos为/var/log/httpd/),并通过sudo logrotate -f手动测试生效;它由系统cron每日自动触发,不依赖apache进程,安全可靠。

Apache 日志切割用 logrotate 实现,关键是写对配置文件、确认路径、测试生效。它不依赖 Apache 进程,而是由系统 cron 每天自动触发,安全可靠。
确认日志路径和配置位置
不同系统默认日志路径不同:
- Ubuntu/Debian:/var/log/apache2/access.log 和 error.log
- CentOS/RHEL:/var/log/httpd/access_log 和 error_log
logrotate 配置文件统一放在 /etc/logrotate.d/ 目录下。系统通常已自带 apache2(Debian)或 httpd(RHEL)配置,可直接编辑,也可新建(如 /etc/logrotate.d/myapache)。
编写核心轮转规则
以 Ubuntu 为例,在 /etc/logrotate.d/apache2 中写入以下内容:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
/var/log/apache2/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 640 root adm
sharedscripts
postrotate
systemctl reload apache2 > /dev/null 2>&1 || true
endscript
}
关键参数说明:
-
daily:每天切分一次;也可换为
weekly或size 100M(按大小触发) - rotate 30:最多保留 30 个归档日志(即 30 天),超出的自动删除
- compress + delaycompress:压缩旧日志,但最新一轮不压,方便排查
- create 640 root adm:新建日志文件时设权限和属主属组,避免 Apache 写入失败
- postrotate … endscript:切分后重载 Apache,确保新日志写入当前文件
启用并验证配置是否生效
别改完就等明天——先手动测试:
- 检查语法:
sudo logrotate -d /etc/logrotate.d/apache2(-d 是 debug 模式,只模拟不执行) - 强制执行一次:
sudo logrotate -f /etc/logrotate.d/apache2,观察/var/log/apache2/下是否生成access.log.1、error.log.1等文件 - 确认新日志可写:
ls -l /var/log/apache2/*.log*,看权限和时间戳是否正常
系统默认通过 /etc/cron.daily/logrotate 每日凌晨运行,无需额外加 crontab。
进阶建议:让归档更清晰、更省空间
在基础配置上加几行,能显著提升可维护性:
-
dateext:加上这行,归档文件名会带日期(如
access.log-20260820),比数字序号更直观 -
maxage 90:配合
rotate使用,强制删除超过 90 天的所有归档,防止单次保留数虽少但长期累积 - olddir /var/log/apache2/archive:把旧日志移到独立目录,避免和当前日志混在一起(需提前创建目录并赋权)
- 若磁盘紧张,可加 minsize 1M,小日志不切分,减少碎片










