在 Debian 上,Apache 日志(通常是 access.log 和 error.log)默认不会自动按天/大小分割,常见做法有 三种:使用 logrotate(推荐)、Apache 自带的 rotatelogs、或 cronolog。下面分别说明。
Debian 安装 Apache 后,一般已经自带了 logrotate 配置:
/etc/logrotate.d/apache2
cat /etc/logrotate.d/apache2
典型内容示例:
/var/log/apache2/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
if invoke-rc.d apache2 status > /dev/null 2>&1; then
invoke-rc.d apache2 reload > /dev/null 2>&1
fi
endscript
}
daily:每天分割weekly / monthly:按周/月rotate 14:保留 14 份compress:压缩旧日志notifempty:空日志不分割postrotate:分割后重载 Apache(必须,否则不写新文件)logrotate -d /etc/logrotate.d/apache2 # 测试(不真正执行)
logrotate -f /etc/logrotate.d/apache2 # 强制执行
适合不想用 logrotate 的场景。
CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access_%Y%m%d.log 86400" combined
ErrorLog "|/usr/bin/rotatelogs /var/log/apache2/error_%Y%m%d.log 86400"
说明:
86400 = 一天(秒)systemctl restart apache2
✅ 优点:实时分割
❌ 缺点:不会自动压缩、需手动清理
apt install cronolog
配置示例:
CustomLog "|/usr/bin/cronolog /var/log/apache2/access_%Y%m%d.log" combined
logrotate 是否运行:cat /var/lib/logrotate/status
postrotate 里有 reload apache2日志目录一般属于:
root:adm
确保 Apache 用户(www-data)有写权限
| 方式 | 推荐度 | 说明 |
|---|---|---|
| logrotate | ⭐⭐⭐⭐⭐ | Debian 官方方式 |
| rotatelogs | ⭐⭐⭐⭐ | 灵活、实时 |
| cronolog | ⭐⭐ | 老旧 |
如果你愿意,我可以: