日志 ###

该模块以指定的格式写入请求日志。

配置示例#

log_format basic '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time';

access_log /spool/logs/angie-access.log basic buffer=32k;

指令#

access_log#

语法

access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];

access_log off;

默认

access_log off;

上下文

stream, server

设置用于缓冲日志写入的 pathformat 和配置。在同一级配置中可以指定多个日志。通过在第一个参数中指定前缀 "syslog:" 可以配置日志记录到 syslog。特殊值 off 会取消当前级别的所有 access_log 指令。

如果使用了 buffergzip 参数,日志写入将被缓冲。

小心

缓冲区大小不得超过对磁盘文件的原子写入大小。在 FreeBSD 上,此大小是无限制的。

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

  • 如果下一行日志无法放入缓冲区;

  • 如果缓冲数据的时间超过了 flush 参数指定的时间;

  • 当工作进程 重新打开日志文件 或关闭时。

如果使用了 gzip 参数,那么缓冲数据在写入文件前将被压缩。压缩级别可以设置为 1 (最快,压缩最小)到 9 (最慢,压缩最佳)之间。默认情况下,缓冲区大小为 64K 字节,压缩级别设为 1。由于数据以原子块形式压缩,日志文件可以在任何时候通过 "zcat" 解压或读取。

示例:

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

重要

为了使 gzip 压缩正常工作,Angie 必须与 zlib 库一起构建。

文件路径可以包含变量,但这样的日志有一些限制:

  • 使用工作进程凭据的 用户 应有权限在记录日志的目录中创建文件;

  • 缓冲写入不起作用;

  • 每次写入日志时文件都会被打开和关闭。不过,由于经常使用的文件描述符可以存储在缓存中,写入旧文件可以在由 open_log_file_cache 指令的 valid 参数指定的时间内继续。

if 参数启用条件日志记录。如果条件为 "0" 或空字符串,则会话不会被记录。

log_format#

语法

log_format name [escape=default | json | none] string ...;

默认

上下文

stream, server

指定日志格式。

escape 参数允许在变量中设置 jsondefault 字符转义,默认情况下使用 default 转义。值 none 禁用转义。

对于 default 转义,字符 ""、 "\" 以及值小于 32 或大于 126 的其他字符将被转义为 "\xXX"。如果未找到变量值,将记录为连字符 "-"。

对于 json 转义,所有不允许在 JSON 字符串中出现的字符将被转义:字符 """ 和 "\" 被转义为 "\"" 和 "\\",值小于 32 的字符被转义为 "\n"、"\r"、"\t"、"\b"、"\f" 或 "\u00XX"。

open_log_file_cache#

语法

open_log_file_cache max = N [inactive=time] [min_uses=N] [valid=time];

默认

open_log_file_cache off;

上下文

stream, server

定义一个缓存,用于存储包含变量名称的日志文件的文件描述符。该指令具有以下参数:

max

设置缓存中的最大描述符数量;如果缓存已满,则最少最近使用(LRU)的描述符将被关闭。

inactive

设置缓存描述符在无访问期间关闭的时间;
默认情况下为 10 秒。

min_uses

设置在 inactive 参数定义的时间段内文件使用的最小次数,以使描述符留在缓存中;
默认情况下为 1。

valid

设置检查文件是否仍以相同名称存在的时间;
默认情况下为 60 秒。

off

禁用缓存。

使用示例:

open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;