配置文件:
if ($args ~ "&_kw=[\w]+"){
access_log logs/kw;
access_log logs/all;
}
if ($args ~ "(&_pg=[\w]+|&_pc=[\w]+)"){
access_log logs/pg;
access_log logs/all;
}
if ($args ~ "&_kw=[\w]+.*(&_pg=[\w]+|&_pc=[\w]+)"){
access_log logs/kw;
access_log logs/pg;
access_log logs/all;
}
access_log logs/all;
}
http://1.1.1.1/bb?&_kw=1777&_pg=-1&_pc=1
对于上面的配置,访问上面的url时,即匹配第一个if(因为\w为[a-zA-Z0-9_],不包含“-”,又匹配最后一个if,后面的if生效。(匹配多个if的args,后面的if生效)
验证:
if ($args ~ "&_kw=[\w]+"){
access_log logs/kw;
}
if ($args ~ "&_kw=[\w]+"){
access_log logs/kw111;
}
}
关于nginx location(不是多个if)的匹配规则,请参考:http://wiki.nginx.org/NginxHttpCoreModule#location
要求实现如下的日志记录:
当访问ck.php?abc时,将日志记录到abc.log中;当访问ck.php?edf时,将日志记录在edf.log中。其中abc与edf为访问ck.php时加的参数。
实现:
使用if语句判断参数是否以abc开头,然后进行日志的分别存储。
修改nginx.conf,添加:
#如果作为反向代理,一定要把proxy写上,否则不会反向代理该文件
if ($args ~ ^abc){
access_log /usr/local/nginx/logs/abc.log;
}
if ($args ~ ^edf){
access_log /usr/local/nginx/logs/edf.log;
}
}
其中:
$args
This variable is equal to arguments in the line of request;
更多的参数,查看nginx的文档中的NginxHttpCoreModule,里的Variables部分。
http://wiki.nginx.org/NginxHttpCoreModule
大家可以根据自己的需要,结合适当的变量来分离出需要的日志。
要求:
修改访问日志的时间格式,原格式为:03/Jun/2009:07:06:53 +0800 ,修改为:2009-06-03 07:06:53
第一个要修改的文件:
nginx-0.7.59/src/core/ngx_times.c
1、(计算字符串的长度?)
static u_char cached_http_log_time[NGX_TIME_SLOTS]
[sizeof("28/Sep/1970:12:00:00 +0600")];
修改为
static u_char cached_http_log_time[NGX_TIME_SLOTS]
[sizeof("1970-09-28 12:00:00")];
2、(计算字符串的长度?)
ngx_cached_http_log_time.len = sizeof("28/Sep/1970:12:00:00 +0600") - 1;
修改为
ngx_cached_http_log_time.len = sizeof("1970-09-28 12:00:00") - 1;
3、(关键的地方,修改格式)
p2 = &cached_http_log_time[slot][0];
(void) ngx_sprintf()(p2, "%02d/%s/%d:%02d:%02d:%02d %c%02d%02d",
tm.ngx_tm_mday, months[tm.ngx_tm_mon - 1],
tm.ngx_tm_year, tm.ngx_tm_hour,
tm.ngx_tm_min, tm.ngx_tm_sec,
修改为
p2 = &cached_http_log_time[slot][0];
(void) ngx_sprintf(p2, "%4d-%02d-%02d %02d:%02d:%02d",
tm.ngx_tm_year, tm.ngx_tm_mon,
tm.ngx_tm_mday, tm.ngx_tm_hour,
tm.ngx_tm_min, tm.ngx_tm_sec,
注:这里其实将p2格式改成和p1格式基本上相同了,完全可以直接将log_time的格式改成p1,但是为了做个试验,还是手动修改了p2格式。
第二个要修改的文件:
nginx-0.7.59/src/http/modules/ngx_http_log_module.c
{ ngx_string("time_local"), sizeof("28/Sep/1970:12:00:00 +0600") - 1,
修改为
{ ngx_string("time_local"), sizeof("1970-09-28 12:00:00") - 1,
接下来,就是编译源文件,安装了。
您可能感兴趣的文章:
nginx 日志分析的实例学习
Nginx日志模块分析详解
Nginx关闭日志的方法
Nginx日志分析 Nginx日志切割与Awstats配置
nginx日志配置、Nginx日志分割
有关nginx日志格式的设计分享
nginx日志统计访问时间的例子
nginx日志配置文件的格式说明
nginx日志报大量400错误的解决方法
nginx关闭favicon.ico日志记录的方法
nginx与apache日志格式的区别
nginx日志中记录cookie的实现方法
Nginx日志中过滤关键字的写法
Nginx 日志分析实例