Apache 日志太大是常见问题,可以从短期清理、长期控制、自动轮转、分析归档几个层面来解决。下面按实用程度给你一套方案。
常见路径:
/var/log/apache2/access.log
/var/log/apache2/error.log
# 或
/var/log/httpd/access_log
/var/log/httpd/error_log
sudo truncate -s 0 /var/log/apache2/access.log
sudo truncate -s 0 /var/log/apache2/error.log
⚠️ 不要直接 rm 日志文件,Apache 还占用文件句柄,删了也不会释放空间。
logrotatecat /etc/logrotate.d/apache2
# 或
cat /etc/logrotate.d/httpd
/var/log/apache2/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
systemctl reload apache2 > /dev/null 2>&1 || true
endscript
}
含义:
daily:每天轮转rotate 14:保留 14 天compress:压缩旧日志reload apache:重新打开日志文件sudo logrotate -d /etc/logrotate.d/apache2 # 测试
sudo logrotate -f /etc/logrotate.d/apache2 # 强制执行
编辑 Apache 配置:
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog ${APACHE_LOG_DIR}/access.log common
去掉 %{Referer}i %{User-Agent}i 可大幅减少体积。
SetEnvIf Request_URI \.(css|js|jpg|jpeg|png|gif|ico|woff2?)$ static
CustomLog ${APACHE_LOG_DIR}/access.log combined env=!static
# 错误日志级别调高
LogLevel warn
CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access_%Y%m%d.log 86400" combined
mod_log_pipersyslog 转发truncate 清理当前大日志logrotate如果你愿意,可以告诉我:
我可以给你精确可复制的配置。