访问日志¶
模块: 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.syslog-level
(自 1.4.33 起)
syslog 日志记录的严重级别(参见 https://en.wikipedia.org/wiki/Syslog#Severity_level 获取数值)默认值: 6 (信息)
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 += "}"