nginx 日志小记
nginx 默认的日志有特定的格式,我们也可以自定义,
默认的格式是预定义的 combined1
2
3log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
配置的日志可以使用这个默认的,如果满足需求的话1
2
3
4Syntax: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
Default: access_log logs/access.log combined;
Context: http, server, location, if in location, limit_except
而如果需要额外的一些配置的话可以自己定义 log_format
,比如我想要给日志里加上请求时间,那就可以自己定义一个 log_forma
t 比如添加下1
2
3$request_time
request processing time in seconds with a milliseconds resolution;
time elapsed between the first bytes were read from the client and the log write after the last bytes were sent to the client1
2
3log_format combined_extend '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$request_time"';
然后其他的比如还有 gzip 压缩,可以设置压缩级别,flush 刷盘时间还有根据条件控制
这里的条件控制简单看了下还比较厉害
比如我想对2xx 跟 3xx 的访问不记录日志1
2
3
4
5
6map $status $loggable {
~^[23] 0;
default 1;
}
access_log /path/to/access.log combined if=$loggable;
当 $loggable
是 0 或者空时表示 if 条件为否,上面的默认就是 1,只有当请求状态 status 是 2xx 或 3xx 时才是 0,代表不用记录,有了这个特性就可以更灵活地配置日志
文章主要参考了 nginx 的 log 模块的文档