模块 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
“syslog:
“ 前缀。
特殊值off
全部取消access_log
当前级别的Directives。
如果未指定格式,则预定义的
“combined
“ 格式。
如果buffer
或gzip
(1.3.10, 1.2.7)
参数,则将缓冲对 log 的写入。
缓冲区大小不得超过对磁盘文件的原子写入的大小。 对于 FreeBSD,这个大小是无限的。
启用缓冲后,数据将被写入文件:
- 如果下一个 log 行不适合缓冲区;
- 如果缓冲数据早于
flush
参数 (1.3.10, 1.2.7); - 当 worker 进程重新打开日志时 文件或正在关闭。
如果gzip
参数,则缓冲数据将
在写入文件之前进行压缩。
压缩级别可以设置在 1 之间(最快,压缩较少)
和 9(最慢,最佳压缩)。
默认情况下,缓冲区大小等于 64K 字节,压缩级别
设置为 1。
由于数据被压缩在原子块中,因此日志文件可以解压缩
或由 ”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 和
access_log
在同一配置级别上:server { root /spool/vhost/data/$host; access_log /spool/vhost/logs/$host; ...
这if
参数 (1.7.0) 启用条件日志记录。
如果condition
计算结果为 “0”
或空字符串。
在以下示例中,响应代码为 2xx 和 3xx 的请求
不会被记录:
map $status $loggable { ~^[23] 0; default 1; } access_log /path/to/access.log combined if=$loggable;
语法: |
log_format
|
---|---|
默认值: |
log_format combined "..."; |
上下文: |
http |
指定日志格式。
这escape
parameter (1.11.8) 允许设置json
或default
角色逃逸
在 Variables 中,默认情况下,default
使用转义。
这none
值 (1.13.10) 禁用转义。
为default
逃避
字符 “”、“ ”“、
以及值小于 32 (0.7.0) 或大于 126 (1.1.6) 的其他字符
转义为 ”"
\
\xXX
”.
如果未找到变量值,则
将记录连字符 (“”)。-
为json
逃避
不允许所有字符
在 JSON 字符串中将被转义:
字符 “” 和
“” 被转义为
“” 和 “”,
值小于 32 的字符将被转义为
“"
\
\"
\\
\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
- 设置在此期间使用文件的最小次数
由
inactive
参数 让描述符在缓存中保持打开状态; 默认情况下为 1 valid
- 设置时间,在此时间之后应检查文件 仍然存在于同名中;默认情况下为 60 秒
off
- 禁用缓存
使用示例:
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;