pipelog

`pipelog` 指令通过管道将 HTTP 访问日志数据发送到外部程序。

语法pipelog command [format [nonblocking] [if=condition]]; pipelog off;
默认值off
上下文http, server, location, if in location, limit_except
参数1+

说明

pipelog 指令是由 NGINX pipelog 模块提供的一个功能,允许将 NGINX 的访问日志与外部程序集成。该指令可以放置在多种上下文中,包括 httpserverlocation,以及在 location 块中由 if 指定的条件或 limit_except 上下文。它支持灵活的语法,用户可以指定要执行的外部命令,随后可选地指定日志格式和其他参数,例如 nonblocking,以在不阻塞主请求进程的情况下执行日志命令。

鼓励用户使用 pipelog_format 指令定义日志格式,在其中描述日志条目的结构。日志可以作为文本流发送给任何从标准输入读取的命令。该指令还允许使用 if 条件来控制何时记录日志,从而根据请求属性或其他条件选择性地记录日志。如果提供,日志格式可以引用多个变量,类似于 NGINX 的内置日志格式,从而实现自定义的日志条目。

该指令默认被禁用,可以通过 pipelog off; 显式关闭。正确使用此指令需要注意语法以及所执行的外部命令的要求,确保其能够适当地处理传入的日志数据。

配置示例

pipelog_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

pipelog "logger -t nginx" main;

确保由命令指定的外部程序能够从标准输入读取并正确处理数据。

通过外部命令大量记录日志时要注意性能影响,尤其是在同步阻塞模式下。

if 条件的使用如果未正确实现,可能导致意外行为;请确保条件按预期求值。

← 返回所有指令