在 Ubuntu 下 Apache 访问日志 / 错误日志 的分割(日志轮转)主要有 两种常见做法:
✅ 使用 Ubuntu 自带的 logrotate(推荐)
✅ 使用 Apache 自带的 rotatelogs(按时间切割)
下面分别说明,并给出可直接用的配置示例。
Ubuntu 默认已经为 Apache 配置了 logrotate。
cat /etc/logrotate.d/apache2
默认内容大致如下(不同版本略有差异):
/var/log/apache2/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 www-data adm
sharedscripts
postrotate
systemctl reload apache2 > /dev/null 2>&1 || true
endscript
}
| 参数 | 含义 |
|---|---|
| daily | 每天分割 |
| rotate 14 | 保留 14 个历史日志 |
| compress | 启用 gzip 压缩 |
| create | 创建新日志文件 |
| postrotate | 分割后重新加载 Apache |
例如:
/var/log/apache2/*.log {
weekly
rotate 30
missingok
notifempty
nocreate
sharedscripts
postrotate
systemctl reload apache2
endscript
}
sudo logrotate -vf /etc/logrotate.d/apache2
适合 需要按小时、按天自动切割,但不用 logrotate 的场景。
编辑站点配置或 apache2.conf:
sudo nano /etc/apache2/sites-available/000-default.conf
CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access_%Y%m%d.log 86400" combined
按小时:
CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access_%Y%m%d%H.log 3600" combined
错误日志:
ErrorLog "|/usr/bin/rotatelogs /var/log/apache2/error_%Y%m%d.log 86400"
sudo systemctl restart apache2
✅ 优点:实时切割
❌ 缺点:不如 logrotate 规范,日志文件需手动清理
| 场景 | 推荐方式 |
|---|---|
| Ubuntu 默认服务器 | ✅ logrotate |
| 按小时切割 | rotatelogs |
| 自动化 + 压缩 + 自动清理 | ✅ logrotate |
sudo systemctl reload apache2
✅ Ubuntu + Apache = 直接用 logrotate
✅ 设置:
如果你愿意,可以把你当前的 Apache 日志路径 / 配置文件贴出来,我可以帮你写一份完全适合你服务器的 logrotate 配置。