模块 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 path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
默认:
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,这个大小是无限的。

当启用缓冲时,数据将被写入文件:

如果gzip使用该参数,则缓冲数据在写入文件之前将被压缩。压缩级别可以设置在 1(最快,压缩程度较低)和 9(最慢,压缩效果最佳)之间。默认情况下,缓冲区大小等于64K字节,压缩级别设置为1。由于数据是按原子块压缩的,因此日志文件可以随时解压或通过“ ”读取zcat

例子:

access_log /path/to/log.gz combined gzip flush=5m;

要使 gzip 压缩发挥作用,必须使用 zlib 库构建 nginx。

文件路径可以包含变量(0.7.6+),但此类日志有一些限制:

参数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 name [escape=default|json|none] string ...;
默认:
log_format combined "...";
语境: http

指定日志格式。

参数escape(1.11.8)允许 在变量中设置json或转义字符,默认情况下使用转义。值(1.13.10) 禁用转义。 defaultdefaultnone

对于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 max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
默认:
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;