模块 ngx_http_log_module
Example Configuration Directives access_log log_format open_log_file_cache |
模块ngx_http_log_module
以指定的格式写入请求日志。
请求记录在处理结束的位置的上下文中。如果在请求处理期间发生 内部重定向,则它可能与原始位置不同 。
配置示例
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;
指令
句法: |
access_log
access_log |
---|---|
默认: |
access_log logs/access.log combined; |
语境: |
http , server , location , if in location ,limit_except |
设置缓冲日志写入的路径、格式和配置。可以在同一配置级别上指定多个日志。
可以通过在第一个参数中指定“ ”前缀来配置记录到系统日志。syslog:
特殊值off
取消
access_log
当前级别的所有指令。如果未指定格式,则combined
使用预定义的“ ”格式。
如果
使用
buffer
或(1.3.10, 1.2.7) 参数,则对日志的写入将被缓冲。gzip
缓冲区大小不得超过磁盘文件原子写入的大小。对于 FreeBSD,这个大小是无限的。
当启用缓冲时,数据将被写入文件:
- 如果下一个日志行无法放入缓冲区;
-
如果缓冲的数据早于
flush
参数指定的数据(1.3.10、1.2.7); - 当工作进程重新打开日志文件或关闭时。
如果gzip
使用该参数,则缓冲数据在写入文件之前将被压缩。压缩级别可以设置在 1(最快,压缩程度较低)和 9(最慢,压缩效果最佳)之间。默认情况下,缓冲区大小等于64K字节,压缩级别设置为1。由于数据是按原子块压缩的,因此日志文件可以随时解压或通过“ ”读取zcat
。
例子:
access_log /path/to/log.gz combined gzip flush=5m;
要使 gzip 压缩发挥作用,必须使用 zlib 库构建 nginx。
文件路径可以包含变量(0.7.6+),但此类日志有一些限制:
- 工作进程使用其凭据的用户应有权在包含此类日志的目录中创建 文件;
- 缓冲写入不起作用;
-
每次写入日志时都会打开和关闭文件。但是,由于经常使用的文件的描述符可以存储在缓存中,因此可以在open_log_file_cache
指令的
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
(1.11.8)允许
在变量中设置json
或转义字符,默认情况下使用转义。值(1.13.10) 禁用转义。
default
default
none
对于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 |
定义一个缓存,用于存储名称中包含变量的常用日志的文件描述符。该指令具有以下参数:
max
- 设置缓存中描述符的最大数量;如果缓存已满,最近最少使用 (LRU) 描述符将被关闭
inactive
- 设置一个时间,如果在此期间没有访问,则关闭缓存的描述符;默认10秒
min_uses
-
设置参数定义的时间内文件使用的最小次数,
inactive
以使描述符在缓存中保持打开状态;默认情况下,1 valid
- 设置检查同名文件是否仍然存在的时间;默认情况下,60 秒
off
- 禁用缓存
使用示例:
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;