温馨提示×

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(如 warnerror),避免产生过多日志影响性能。

0