用nginxloggingparsing的请求

如何为nginx设置一个自定义的日志格式,以便请求被parsing并且它的部分被分开logging?

我们提供一个图片文件来计算邮件打开。 图片的url有所不同,但遵循以下规则:

http://img.zgserver.com/logging/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; } 

所以我有variables$ 1和$ 2中的值。 我如何在日志格式中使用它们?

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; }