Ubuntu Apache日志格式详解
小樊
35
2025-11-30 04:39:44
Ubuntu 上 Apache 日志格式详解
一 日志类型与默认路径
- 访问日志 access.log:记录每一次 HTTP 请求的详细信息,常见位置为 /var/log/apache2/access.log。
- 错误日志 error.log:记录服务器运行中的错误与诊断信息,常见位置为 /var/log/apache2/error.log。
- 路径通常通过变量 ${APACHE_LOG_DIR} 定义,默认指向 /var/log/apache2(可在 /etc/apache2/envvars 中查看与调整)。
- 虚拟主机可单独定义访问与错误日志,便于按站点拆分与排障。
二 核心指令与概念
- LogFormat:定义日志格式别名与格式字符串(如 common、combined 或自定义)。
- CustomLog:按指定格式写入访问日志(语法:CustomLog 路径 格式别名)。
- ErrorLog:指定错误日志文件路径。
- TransferLog:使用已定义的格式记录访问日志(较老的方式,CustomLog 更常用)。
- LogLevel:设置错误日志的日志级别(如 warn、error、info、debug 等)。
三 常用日志格式与字段释义
- 通用日志格式 Common Log Format(CLF)
- 定义:LogFormat “%h %l %u %t "%r" %>s %b” common
- 示例:127.0.0.1 - - [10/Nov/2021:19:22:12 -0000] “GET /index.html HTTP/1.1” 200 3423
- 字段释义:
- %h:客户端 IP 地址
- %l:远程登录名(identd,通常为 -)
- %u:HTTP 认证用户名(通常为 -)
- %t:请求时间(格式如 [day/month/year:HH:MM:SS zone])
- %r:请求第一行(方法、URI、协议)
- %>s:最终状态码(如 200、404)
- %b:响应体字节数(不含首部,可能为 -)
- 组合日志格式 Combined
- 定义:LogFormat “%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"” combined
- 在 CLF 基础上增加:
- %{Referer}i:来源页面 URL
- %{User-Agent}i:客户端标识字符串
- 常见变体与扩展
- 使用 %O(而非 %b)记录“实际发送给客户端”的字节数(包含可能的分段传输等差异)。
- 反向代理或 CDN 场景记录真实客户端 IP:在格式中加入 %{X-Forwarded-For}i。
- 示例(自定义带真实 IP 的格式):
- LogFormat “%h %{X-Forwarded-For}i %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"” custom_log
- CustomLog ${APACHE_LOG_DIR}/access.log custom_log
- 说明:不同发行版或版本中,默认的 combined 可能使用 %b 或 %O;Ubuntu 常见为 %O 的变体。
四 配置示例与生效方式
- 全局或默认站点配置(/etc/apache2/apache2.conf 或 /etc/apache2/sites-available/000-default.conf 等)
- 定义格式与路径:
- LogFormat “%h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"” combined
- ErrorLog ${APACHE_LOG_DIR}/error.log
- CustomLog ${APACHE_LOG_DIR}/access.log combined
- 按虚拟主机拆分日志:
- <VirtualHost *:80>
- ServerName example.com
- DocumentRoot /var/www/example
- ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
- CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
- …
-
- 使配置生效:
- 检查语法:sudo apache2ctl configtest
- 重新加载:sudo systemctl reload apache2(或 sudo systemctl restart apache2)
- 验证输出:
- 实时查看访问日志:tail -f /var/log/apache2/access.log
- 实时查看错误日志:tail -f /var/log/apache2/error.log
五 日志轮转与运维建议
- 使用 logrotate 管理 Apache 日志轮转(/etc/logrotate.d/apache2 或 /etc/logrotate.conf 包含规则),常见策略:
- 按日轮转、保留 7 天、压缩归档、延迟压缩、空文件不轮转、创建指定权限新文件。
- 示例片段:
- /var/log/apache2/*.log {
- daily
- missingok
- rotate 7
- compress
- delaycompress
- notifempty
- create 640 root adm
- }
- 生产建议:
- 在反向代理/CDN 前置时,优先记录 X-Forwarded-For 以获取真实客户端 IP。
- 为关键站点启用独立访问/错误日志,便于定位问题与审计。
- 合理设置 LogLevel(如 warn 或 error),避免产生过多日志影响性能。