项目

通用

个人资料

操作

访问日志

模块: mod_accesslog

描述

记录服务器处理的 HTTP 请求

选项

  • accesslog.format
    日志记录格式 用于每个 HTTP 请求

    默认值: "%h %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""

  • accesslog.escaping (自 1.4.66 起)
    选择控制字符和高位字符的转义约定
    控制字符和高位字符在日志记录中以反斜杠转义
    accesslog.escaping = "default" 使用默认转义约定 ("\xFF")
    accesslog.escaping = "json" 使用 JSON 转义约定 ("\uFFFF")

    默认值: "default"

  • accesslog.use-syslog
    将访问日志发送到 syslog
    (如果两者都设置,则覆盖 accesslog.filename)
    (syslog 到 server.syslog-facility (自 1.4.75 起,或自 1.4.46 使用 server.errorlog-use-syslog 起)

    默认值: 禁用

  • accesslog.filename
    如果未使用 syslog,则访问日志应写入的文件名。
    如果名称以 '|' 开头,名称的其余部分将被视为将生成并接收输出的进程的名称
    如果您有多个工作进程并希望轮换日志,请使用管道记录器,例如 accesslog.filename = "|/usr/sbin/cronolog ... "
    注意: 如果您记录到管道并且 lighty 处于 chroot 环境中,则运行 lighty 的用户将需要访问“/bin/sh”。

    默认值: 禁用

    accesslog.filename = "/var/log/lighttpd.log" 
    
    $HTTP["host"] == "www.example.org" {
      accesslog.filename = "|/usr/bin/cronolog ... " 
    }

日志记录格式

日志记录的格式模板

默认
accesslog.format = "%h %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""

这类似于组合日志格式(NCSA 扩展日志格式)(由 Apache HTTPD 访问日志 使用)
accesslog.format = "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
但 lighttpd 使用 %V 代替了现在已过时的 %l

(选项类似于 Apache HTTPD mod_log_config 格式

选项 描述
%% 百分号
%h 远程主机的 IP 地址
%{mask}h 远程主机的 IP 地址 (遮蔽低位) (在 1.4.70 中支持)
%l 标识名称(不支持)
%u 已认证用户
%t 请求结束时间戳
%{...}t 请求结束时间戳 (在 1.4.40 中支持)
%r 请求行
%s 状态码
%b 为正文发送的字节数
%{label}i HTTP 请求头
%a 远程地址 (在 1.4.40 中支持)
%{mask}a 远程地址 (遮蔽低位) (在 1.4.70 中支持)
%A 本地地址 (在 1.4.40 中支持)
%B 与 %b 相同
%C Cookie 字段 (在 1.4.40 中支持)
%D 使用的微秒时间 (在 1.4.40 中支持)
%{label}e 环境变量
%f 物理文件名
%H 请求协议 (HTTP/1.0, ...)
%k 保持连接数 (在 1.4.40 中支持)
%m 请求方法 (GET, POST, ...)
%{label}n 备注(内部模块备注) (在 1.4.43 中支持)
%{label}o HTTP 响应头
%p 服务器端口
%{...}p 地址端口(标准,本地,远程) (在 1.4.49 中支持)
%P (不支持)
%q 查询字符串
%T 使用的秒数时间
%{UNIT}T 使用的 UNIT 时间 (秒, 毫秒, 微秒, 或纳秒) (在 1.4.40 中支持)
%U 请求 URL
%v 服务器名称
%V HTTP 请求主机名
%X 连接状态
%I 传入字节数
%O 传出字节数
  • 如果 %s 写为 %>s 或 %<s,则 < 和 > 将被忽略。它们是为了与 Apache 兼容而支持的。
  • %h 始终返回主机的 IP 地址,而不是名称。这使其等同于 %a。
  • %a, %A, %{name}C, %D, %k, %{...}t, %{...}T 在 lighttpd 1.4.40 及更高版本中实现。
  • %i 和 %o 预期字段名称应写在大括号中。
  • 与 Apache 不同,%q 不会以 '?' 为前缀
  • %{strftime format string}t 自 1.4.24 起支持。
  • %{UNIT}t 选项: %{sec}t, %{msec}t, %{usec}t, %{nsec}t, %{msec_frac}t, %{usec_frac}t, %{nsec_frac}t, %{...strftime-format...}t
  • %{UNIT}T 选项: %{s}T, %{sec}T, %{ms}T, %{msec}T, %{us}T, %{usec}T, %{ns}T, %{nsec}T
  • %t 的工作方式与 Apache 不同(Apache 记录请求开始时间)。它显示的是请求实际交付的时间。对于大多数用户来说,这并不重要,因为请求通常不会花费很长时间来处理。使用 %{begin:...}t 获取请求开始时间。
  • %{ratio}n 显示文件压缩比,适用于 mod_deflate (自 1.4.43 起)

禁用日志记录

如果启用了日志记录,可以在 lighttpd 条件中选择性地禁用日志记录。例如,要禁用对 /robots.txt 的请求的日志记录

如果使用 accesslog.filename
$HTTP["url"] == "/robots.txt { accesslog.filename = "" }

如果使用 accesslog.use-syslog
$HTTP["url"] == "/robots.txt { accesslog.use-syslog = "disable" }

要禁用来自 localhost 的请求的日志记录,如果使用 accesslog.filename
$HTTP["remote-ip"] == "127.0.0.1" { accesslog.filename = "" }
$HTTP["remote-ip"] == "[::1]" { accesslog.filename = "" }

响应头

访问日志模块提供了一种特殊方式,用于将应用程序内容记录到访问日志文件中。
它可用于将会话 ID 记录到日志文件中,例如 X-LIGHTTPD-SID。如果您想将 X-LIGHTTPD-SID 记录到访问日志中,只需在 accesslog.format 的 %{...}o 中指定字段名即可。前缀 X-LIGHTTPD- 很特殊,因为所有以此前缀开头的响应头都被认为是 lighttpd 特有的,并且不会发送给客户端。

accesslog.format = "%h %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{X-LIGHTTPD-SID}o\""

<?php
  session_start();
  header("X-LIGHTTPD-SID: ".session_id());
?>
TEST

JSON 格式

accesslog.escaping = "json" 自 lighttpd 1.4.66 起可用

# example mod_accesslog format for json output using high-precision timestamps
# note: lighttpd.conf strings are double-quoted
#       (must backslash-escape double-quotes within the log format string)
accesslog.escaping = "json" 
accesslog.format  = "{ " 
#accesslog.format += "\"@timestamp\": \"%{begin:%FT%T}t.%{begin:usec_frac}tZ\", " # request start timestamp
accesslog.format += "\"@timestamp\": "        +"\"%{%FT%T}t.%{usec_frac}tZ\", "   # request end   timestamp
accesslog.format += "\"@fields\": " 
accesslog.format +=   "{ " 
accesslog.format +=    "\"http_host\": "      +"\"%V\", " # Host (:authority)
accesslog.format +=    "\"remote_addr\": "    +"\"%h\", " 
accesslog.format +=    "\"remote_user\": "    +"\"%u\", " 
accesslog.format +=    "\"request_method\": " +"\"%m\", " 
accesslog.format +=    "\"request\": "        +"\"%r\", " 
accesslog.format +=    "\"status\": "         +  "%s, " 
accesslog.format +=    "\"body_bytes_sent\": "+"\"%b\", " 
accesslog.format +=    "\"duration_usec\": "  +  "%D, "   # usec (microseconds)
accesslog.format +=    "\"http_referrer\": "  +"\"%{Referer}i\", " 
accesslog.format +=    "\"http_user_agent\": "+"\"%{User-Agent}i\" " 
accesslog.format +=   "} " 
accesslog.format += "}" 

更新者:gstrauss 大约 1 年前 · 49 次修订