在 Ubuntu 系统下,Apache 默认使用 logrotate 进行日志轮转。你可以通过以下方法配置 logrotate,确保日志按照需求进行归档和清理。
1. Apache 日志轮转默认配置
Ubuntu 的 Apache (apache2) 日志轮转配置文件位于:
/etc/logrotate.d/apache2
执行以下命令查看默认配置:
cat /etc/logrotate.d/apache2
默认配置示例:
/var/log/apache2/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
if systemctl status apache2 > /dev/null; then
systemctl reload apache2 > /dev/null
fi
endscript
}
2. 配置说明
可以根据需求修改以下参数:
weekly:日志每周轮转一次,可以改为 daily(每日)、monthly(每月)。
rotate 52:保留 52 份日志(大约一年),可根据需求调整。
compress:使用 gzip 压缩旧日志,节省存储空间。
delaycompress:延迟一轮再压缩,以便不影响 Apache 访问最新日志。
notifempty:如果日志为空,则不创建新日志。
create 640 root adm:新日志文件权限,确保只有 root 和 adm 组可以访问。
sharedscripts:确保 postrotate 只执行一次,而不是对每个日志文件执行。
postrotate:日志轮转后重载 Apache,防止日志文件句柄丢失。
3. 修改日志轮转规则
如果需要每天轮转,保留30天日志,且不压缩,可修改为:
/var/log/apache2/*.log {
daily
missingok
rotate 30
notifempty
create 640 root adm
sharedscripts
postrotate
systemctl reload apache2 > /dev/null
endscript
}
然后运行:
sudo systemctl restart logrotate
4. 手动触发日志轮转
如果你想立即测试日志轮转:
sudo logrotate -f /etc/logrotate.d/apache2
执行后,可以检查日志目录:
ls -lh /var/log/apache2/
确认是否生成了 .gz 归档文件。
5. 额外优化
如果你在 Apache 虚拟主机中定义了自定义日志路径,例如:
ErrorLog /var/log/apache2/my_site_error.log
CustomLog /var/log/apache2/my_site_access.log combined
你需要手动将这些路径添加到 logrotate 配置:
/var/log/apache2/my_site_*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
systemctl reload apache2 > /dev/null
endscript
}
如果日志增长过快,可以基于大小触发轮转,比如日志超过 100M 就轮转:
/var/log/apache2/*.log {
size 100M
missingok
rotate 10
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
systemctl reload apache2 > /dev/null
endscript
}
总结:
- Apache 默认使用 logrotate 进行日志管理,配置文件在 /etc/logrotate.d/apache2。
- 可以自定义轮转规则,比如 daily(每日)、rotate 30(保留 30 份)、compress(压缩)。
- 日志轮转后需要重启或重载 Apache,防止日志句柄丢失。
- 可以基于日志大小触发轮转,如 size 100M,避免磁盘占满。
你可以根据实际需求调整配置!