模块 ngx_http_log_module
access_log log_format open_log_file_cache 的配置 Directives 示例 |
该模块写入请求日志
以指定的格式。ngx_http_log_module
请求记录在处理结束位置的上下文中。 它可能与原始位置不同,如果internal 重定向发生在请求处理期间。
示例配置
log_format compression '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" "$gzip_ratio"'; access_log /spool/logs/nginx-access.log compression buffer=32k;
Directives
语法: |
access_log
access_log |
---|---|
默认值: |
access_log logs/access.log combined; |
上下文: |
http , , , ,server location if in location limit_except |
设置缓冲日志写入的路径、格式和配置。
可以在同一配置级别上指定多个日志。
可以通过指定 syslog 来配置日志记录到 syslog
第一个参数中的 “” 前缀。
特殊值取消当前级别上的所有Directives。
如果未指定格式,则预定义的
使用了 “” 格式。syslog:
off
access_log
combined
如果 或 (1.3.10, 1.2.7)
参数,则将缓冲对 log 的写入。buffer
gzip
缓冲区大小不得超过对磁盘文件的原子写入的大小。 对于 FreeBSD,这个大小是无限的。
启用缓冲后,数据将被写入文件:
- 如果下一个 log 行不适合缓冲区;
- 如果缓冲数据早于参数指定的时间 (1.3.10, 1.2.7);
flush
- 当 worker 进程重新打开日志时 文件或正在关闭。
如果使用该参数,则缓冲数据将
在写入文件之前进行压缩。
压缩级别可以设置在 1 之间(最快,压缩较少)
和 9(最慢,最佳压缩)。
默认情况下,缓冲区大小等于 64K 字节,压缩级别
设置为 1。
由于数据被压缩在原子块中,因此日志文件可以解压缩
或随时由 “” 读取。gzip
zcat
例:
access_log /path/to/log.gz combined gzip flush=5m;
要使 gzip 压缩正常工作,必须使用 zlib 库构建 nginx。
文件路径可以包含变量 (0.7.6+), 但是这样的日志有一些限制:
- 其凭证被 Worker 进程使用的用户应该 有权在具有 此类日志;
- 缓冲写入不起作用;
- 每次日志写入时,都会打开和关闭文件。
但是,由于可以存储常用文件的描述符
在缓存中,写入旧文件
可以在 open_log_file_cache Directives的参数指定的时间内继续
valid
- 在每次日志写入期间,将检查请求的根目录是否存在,如果不存在,则日志不存在
创建。
因此,最好同时指定 root 和 on the same configuration level:
access_log
server { root /spool/vhost/data/$host; access_log /spool/vhost/logs/$host; ...
参数 (1.7.0) 启用条件日志记录。
如果计算结果为 “0” ,则不会记录请求
或空字符串。
在以下示例中,响应代码为 2xx 和 3xx 的请求
不会被记录:if
condition
map $status $loggable { ~^[23] 0; default 1; } access_log /path/to/access.log combined if=$loggable;
语法: |
log_format
|
---|---|
默认值: |
log_format combined "..."; |
上下文: |
http |
指定日志格式。
参数 (1.11.8) 允许设置或字符转义
在 Variables 中,默认情况下,使用 Escescapeing。
值 (1.13.10) 禁用转义。escape
json
default
default
none
对于转义,
字符 “”、“ ”“、
以及值小于 32 (0.7.0) 或大于 126 (1.1.6) 的其他字符
转义为 “”。
如果未找到变量值,则
将记录连字符 (“”)。default
"
\
\xXX
-
对于转义,
不允许所有字符
在 JSON 字符串中将被转义:
字符 “” 和
“” 被转义为
“” 和 “”,
值小于 32 的字符将被转义为
“”,
“”,
“”,
“”,
“” 或
“”.json
"
\
\"
\\
\n
\r
\t
\b
\f
\u00XX
日志格式可以包含常见变量,以及 仅在日志写入时存在:
$bytes_sent
- 发送到客户端的字节数
$connection
- 连接序列号
$connection_requests
- 当前通过连接发出的请求数 (1.1.18)
$msec
- 时间(以秒为单位),在日志写入时具有毫秒分辨率
$pipe
- “” 如果请求是通过管道传输的,则为 “”
否则
p
.
$request_length
- 请求长度(包括请求行、标头和请求正文)
$request_time
- 请求处理时间(以秒为单位),分辨率为毫秒; 从客户端读取第一个字节之间经过的时间 将最后一个字节发送到客户端后的日志写入
$status
- 响应状态
$time_iso8601
- ISO 8601 标准格式的当地时间
$time_local
- 通用日志格式的当地时间
在现代 nginx 版本中,变量$status (1.3.2, 1.2.2), $bytes_sent (1.3.8, 1.2.5), $connection (1.3.8, 1.2.5), $connection_requests (1.3.8, 1.2.5), $msec (1.3.9, 1.2.6), $request_time (1.3.9, 1.2.6), $pipe (1.3.12, 1.2.7), $request_length (1.3.12, 1.2.7), $time_iso8601 (1.3.12, 1.2.7), 和 $time_local(1.3.12、1.2.7) 也可用作公共变量。
发送到客户端的标题行具有前缀
例如,“” .sent_http_
$sent_http_content_range
配置始终包含预定义的
“” 格式:combined
log_format combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
语法: |
open_log_file_cache
open_log_file_cache |
---|---|
默认值: |
open_log_file_cache off; |
上下文: |
http , ,server location |
定义一个缓存,用于存储常用日志的文件描述符 其名称包含变量。 该Directives具有以下参数:
max
- 设置缓存中的最大描述符数; 如果缓存已满,则为最近最少使用 (LRU) 描述符已关闭
inactive
- 设置关闭缓存描述符的时间 如果在此期间无法访问; 默认情况下为 10 秒
min_uses
- 设置在此期间使用文件的最小次数
由参数
让描述符在缓存中保持打开状态;
默认情况下为 1
inactive
valid
- 设置时间,在此时间之后应检查文件 仍然存在于同名中;默认情况下为 60 秒
off
- 禁用缓存
使用示例:
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;