日志解析请求,nginx的(Log parsed request with nginx)

2019-09-16 09:38发布

如何为nginx的自定义日志格式,所以这一请求得到了解析及其零件被记录分开?

我们为一个图片文件来计算的邮件打开。 的URL图片不同,但遵循以下规则:

http://www.server.com/counter/XXXXX/YYYYY/dailymail.gif

XXXXX - 电子邮件活动的ID; YYYYY - 收件人ID。

有一个单独的日志/counter的位置,我想给像格式

XXXXX   YYYYY    DATETIME

位置部分看起来像

    location    ~* ^counter/([0-9]+)/([^/]+)/dailymail\.gif$ {
        access_log /var/log/mailopened.log
        alias /var/www/site.com/1x1.gif?cid=$1&uid=$2&type=daily;
    }

所以,我在变量$ 1和$ 2的值。 我如何使用它们的日志格式?

Answer 1:

log_format指令都允许在http只的水平,所以你必须在其他变量,例如术语来定义它

http {
  log_format tracking "$xxxx $yyyy $time_local";

后来,在你的位置,只需设置这些变量并登录tracking格式:

location ~* ^counter/([0-9]+)/([^/]+)/dailymail\.gif$ {
  set $xxxx $1;
  set $yyyy $2;
  access_log /var/log/mailopened.log tracking;
  alias /var/www/site.com/1x1.gif?cid=$1&uid=$2&type=daily;
}

随着最新版本的Nginx和PCRE库是可以省略set通话,并明确命名捕获location (感谢@kolbyjack):

location ~* ^counter/(?<xxxx>[0-9]+)/(?<yyyy>[^/]+)/dailymail\.gif$ {
  access_log /var/log/mailopened.log tracking;
  alias /var/www/site.com/1x1.gif?cid=$1&uid=$2&type=daily;
}


文章来源: Log parsed request with nginx