在 Ubuntu 上,Apache 日志(通常是 access.log 和 error.log)默认并不会自动按天/大小分割,需要借助工具来实现。常见做法有下面几种,按推荐程度排序:
logrotate(✅ 推荐,Ubuntu 自带)Ubuntu 默认已经为 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
systemctl reload apache2 > /dev/null 2>&1
endscript
}
daily:每天分割weekly:每周monthly:每月rotate 14:保留 14 份compress:压缩旧日志notifempty:空日志不分割postrotate:分割后让 Apache 重新打开日志logrotate -d /etc/logrotate.d/apache2
logrotate -f /etc/logrotate.d/apache2
✅ 这是最标准、最省心的方式
rotatelogs(按大小/时间)如果你不想用 logrotate,可以在 Apache 配置里直接用 rotatelogs。
编辑:
/etc/apache2/sites-available/000-default.conf
修改:
CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access_%Y%m%d.log 86400" combined
或按大小(如 10MB):
CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access_%Y%m%d.log 10M" combined
修改后:
systemctl restart apache2
⚠️ 注意:这种方式 Apache 自己管理日志,不会自动压缩
cronolog(较少用)安装:
apt install cronolog
配置:
CustomLog "|/usr/bin/cronolog /var/log/apache2/access_%Y%m%d.log" combined
现在用得比较少,不推荐新项目使用。
/var/log/apache2/
├── access.log
├── error.log
├── access.log.1
├── access.log.2.gz
| 方式 | 推荐度 | 说明 |
|---|---|---|
| logrotate | ⭐⭐⭐⭐⭐ | 官方推荐,自动压缩 |
| rotatelogs | ⭐⭐⭐ | 灵活,但需手动管理 |
| cronolog | ⭐⭐ | 老旧方案 |
如果你愿意,我可以: