nginx中access_log记录日志是可以自定义格式的,通过自定义格式,一方面供我们更方便的查询请求,另外还可以做统计,接口访问速度分析等。

语法:

log_format name format [format ...]

 

例如nginx中默认的格式如下:

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

其中 main就是名称。

日志文件生成后每一行的内容大致如下:

 

172.20.0.139 - - [27/Aug/2020:03:00:24 +0000] "POST /api/goodsReturn/pushUpdateGoods HTTP/1.1" 200 17 "-" "okhttp/3.11.0"

 

 

作用域:

http,server

也就是说log_format的定义可以放在nginx配置文件中的server作用域中也可以放在http作用域中

 

字段介绍:

变量

说明

$time_local

通用日志格式下的本地时间;(服务器时间)

$remote_addr

客户端(用户)IP地址

$status

请求状态码,如200,404,301,302等

$body_bytes_sent

发送给客户端的字节数,不包括响应头的大小

$bytes_sent

发送给客户端的总字节数

$request_length

请求的长度(包括请求行,请求头和请求正文)

$request_time

请求处理时间,单位为秒,小数的形式

$upstream_addr

集群轮询地址

$upstream_response_time

指从Nginx向后端(php-cgi)建立连接开始到接受完数据然后关闭连接为止的时间

$remote_user

用来记录客户端用户名称

$request

请求方式(GET或者POST等)+URL(包含$request_method,$host,$request_uri)

$http_user_agent

用户浏览器标识

$http_host

请求的url地址(目标url地址)的host

$host

等同于$http_host

$http_referer

来源页面,即从哪个页面转到本页,如果直接在浏览器输入网址来访问,则referer为空

$uri

请求中的当前URI(不带请求参数,参数位于$args),不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改。

$document_uri

等同于$uri

$request_uri

比$uri多了参数,即$uri+$args

$http_x_forwarded_for

如果使用了代理,这个参数会记录代理服务器的ip和客户端的ip

应用

按照上面的字段介绍,我们可以自己的需求来组装日志格式,方便与以后分析日志来获取信息,比如获取一下后端cgi程序处理最慢的接口有哪些,获取总体http请求时间平均值和慢请求(慢查询)。

 

最后附上nginx官方中文文档地址供大家查阅:https://www.nginx.cn/doc/