1. 调整日志级别
通过降低日志详细程度减少日志文件大小。Apache的LogLevel指令控制错误日志的记录级别,可选值从高到低为emerg、alert、crit、error、warn、notice、info、debug。生产环境中,建议将全局日志级别设置为warn或error,仅记录关键问题;若需针对特定虚拟主机或目录进一步细化,可使用Log指令覆盖,例如:
LogLevel warn
<VirtualHost *:80>
    ServerName example.com
    LogLevel error  # 该虚拟主机仅记录错误日志
    CustomLog logs/example.com_access_log combined
</VirtualHost>
修改后需重启Apache服务使配置生效。
2. 启用日志轮转(Log Rotation)
防止日志文件无限增长占用磁盘空间。CentOS默认使用logrotate工具管理Apache日志轮转,配置文件位于/etc/logrotate.d/httpd。典型配置如下:
/var/log/httpd/*.log {
    daily           # 每天轮转一次
    missingok       # 忽略缺失的日志文件
    rotate 7        # 保留最近7天的日志
    compress        # 压缩旧日志(节省空间)
    notifempty      # 空日志文件不轮转
    create 640 root adm  # 创建新日志文件并设置权限
}
可通过logrotate -f /etc/logrotate.conf手动触发轮转,验证配置是否正确。
3. 使用异步日志记录(Apache 2.4+)
通过异步方式写入日志,减少对主线程的阻塞,提升Apache性能。需结合rotatelogs工具实现,修改配置文件中的ErrorLog和CustomLog指令:
ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/error_log.%Y-%m-%d 86400"
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log.%Y-%m-%d 86400" combined
其中86400表示按天轮转(单位:秒),也可根据需求调整为小时(3600)或分钟(60)。
4. 优化日志格式(CustomLog)
选择简洁的日志格式或自定义字段,减少不必要的信息记录。Apache内置的common格式(仅记录IP、时间、请求方法、URL、状态码、响应大小)比combined格式(额外包含Referer和User-Agent)更高效;若只需关键信息,可自定义格式:
LogFormat "%h %l %u %t \"%r\" %>s %b" minimal  # 仅记录IP、用户、时间、请求、状态码、响应大小
CustomLog /var/log/httpd/access_log minimal
自定义格式需通过LogFormat指令定义,再通过CustomLog指令应用。
5. 禁用不必要的模块
模块的日志记录会增加系统开销。通过注释httpd.conf中不需要的模块加载指令,减少不必要的日志输出。例如,若不需要用户跟踪功能,可注释mod_usertrack模块:
# LoadModule usertrack_module modules/mod_usertrack.so
修改后重启Apache服务。
6. 优化日志存储策略
将日志文件存储在高性能磁盘(如SSD)上,提升写入速度;对于分布式环境,可考虑使用网络文件系统(如NFS)集中存储日志,便于统一管理和备份。
7. 监控与定期清理
du -sh /var/log/httpd/*.log查看日志文件大小,ls -lh /var/log/httpd/*.log查看详细信息,及时发现异常增长的日志。cron定时任务自动清理超过30天的日志,例如创建/path/to/log_cleanup.sh脚本:#!/bin/bash
find /var/log/httpd/ -type f -mtime +30 -name "*.log" -exec rm -rf {} \;
添加执行权限chmod +x /path/to/log_cleanup.sh,并在crontab中添加0 3 * * * /path/to/log_cleanup.sh(每天凌晨3点执行)。