ngx_http_log_module
Module ngx_http_log_module
- 示例配置
- 指令
- 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=sizegzip=level] flush=time];access_log off; |
---|---|
默认: | access_log logs/access.log combined; |
环境: | http, server, location, if in location, limit_except |
设置缓冲日志写入的路径,格式和配置。可以在同一级别指定多个日志。记录到syslog可以通过syslog:
在第一个参数中指定“ ”前缀进行配置。特殊值off
取消access_log
当前级别的所有指令。如果未指定combined
格式,则使用预定义的格式。
如果使用buffer
or gzip
(1.3.10,1.2.7)参数,则写入日志将被缓存。
缓冲区大小不得超过原子写入磁盘文件的大小。对于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 name escape=default|json string ...; |
---|---|
默认: | log_format combined "..."; |
语境: | http |
指定日志格式。
escape
参数(1.11.8)允许设置json
或default
字符逸出变量,默认情况下,default
逸出被使用。
日志格式可以包含公共变量和仅在日志写入时存在的变量:
$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_content_range
。,发送到客户端的标题行具有前缀“sent_http_
”
该配置始终包含预定义的“ 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 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;