apache日志配置核心指令为errorlog、customlog和logformat,分别控制错误日志、访问日志及格式定义;需协同配置路径、格式与轮转逻辑,常用rotatelogs按时间或大小自动分割日志,并支持虚拟主机级独立日志设置。

Apache 日志配置主要靠三个核心指令:ErrorLog 控制错误日志、CustomLog 控制访问日志、LogFormat 定义日志内容格式。写法不复杂,但关键在路径、格式和轮转逻辑是否匹配实际需求。
基础日志路径配置
最简写法直接指定文件路径:
- ErrorLog "/var/log/apache2/error.log" —— 错误日志存到固定文件
- CustomLog "/var/log/apache2/access.log" common —— 访问日志用内置 common 格式
注意:路径必须存在且 Apache 进程有写入权限;若用 ${APACHE_LOG_DIR} 变量(如 Ubuntu 默认),确保该变量已在配置中定义。
常用日志格式选型
LogFormat 预设了几个标准模板,按需选用或微调:
- common:"%h %l %u %t \"%r\" %>s %b" —— IP、时间、请求行、状态码、响应字节数
- combined:在 common 基础上加 "%{Referer}i \"%{User-Agent}i\"" —— 适合分析来源和设备
- 自定义格式示例:LogFormat "%h %t \"%r\" %>s %b \"%{X-Forwarded-For}i\" \"%{User-Agent}i\"" proxy_combined —— 适用于反向代理环境,保留真实客户端 IP
定义后,CustomLog 中引用名称即可,如 CustomLog "/var/log/apache2/access.log" proxy_combined。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
按时间或大小自动轮转日志
避免单个日志无限增长,推荐用 rotatelogs 工具(Apache 自带):
- 每 2 小时切分一次(UTC+8 时区):
CustomLog "|/usr/sbin/rotatelogs -l /var/log/apache2/access_%Y%m%d%H.log 7200" combined - 每天一个文件(-l 表示本地时间):
ErrorLog "|/usr/sbin/rotatelogs -l /var/log/apache2/error_%Y%m%d.log 86400" - 按大小切分(5MB):
CustomLog "|/usr/sbin/rotatelogs /var/log/apache2/access_size.log 5M" common
关键点:rotatelogs 路径要准确(常见于 /usr/bin/ 或 /usr/sbin/);加 -l 参数才按本地时间命名,否则默认 GMT;时差不用手动算,-l 已处理。
多站点日志分离写法
虚拟主机内单独配日志,避免混在一起:
ServerName example.com
DocumentRoot /var/www/example
ErrorLog "/var/log/apache2/example_error.log"
CustomLog "/var/log/apache2/example_access.log" combined- 如果用 rotatelogs,同样写在 VirtualHost 内,各站日志路径和格式互不影响
这样每个站点的日志独立存放,排查问题时定位更快,也方便后续做单独分析或权限隔离。










