Nginx日志设置
Nginx日志分为两种,access_log(访问日志)和error_log(错误日志)
设置access_log
access_log主要用来记录客户端的请求
作用域
可以在http、server、location中指定access_log
可以在不同的server来设置不同的日志
语法
1 2 3 4 5 6 7 8 9
| # path 指定日志存放位置 # format 日志格式 # buffer 日志写入时缓存大小,默认64K # gzip 日志写入时先进行压缩,level来指定压缩率,默认1,从1到9数值越大,压缩比越高,速度越慢 # flush 缓存有效时间,超过flush设置的时间,缓存内容清空 # if 是否写入日志的条件判断,如果为0或者空字符串,该请求将不会写入日志 access_log path [format [buffer=size] [gzip=level] [flush=time] [if=condition]]; # 开启access_log access_log on;
|
设置日志格式
语法
1 2 3 4 5
| # log_format用来设置日志格式 # name 格式名称,用来在日志指定中引用 # escape 编码格式使用,默认是default # string 日志格式内容 log_format name [escape=default|json] string;
|
可用参数
日志格式中可用的参数有
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| $bytes_sent 发送给客户端的总字节数
$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小
$connection 连接序列号
$connection_requests 当前通过连接发出的请求数量
$msec 日志写入时间,单位为秒,精度是毫秒
$pipe 如果请求是通过http流水线发送,则其值为"p",否则为“."
$request_length 请求长度(包括请求行,请求头和请求体)
$request_time 请求处理时长,单位为秒,精度为毫秒,从读入客户端的第一个字节开始,直到把最后一个字符发送张客户端进行日志写入为止
$status 响应状态码
$time_iso8601 标准格式的本地时间,形如“2017-05-24T18:31:27+08:00”
$time_local 通用日志格式下的本地时间,如"24/May/2017:18:31:27 +0800"
$http_referer,从哪个页面链接过来的 请求的referer地址。
$http_user_agent 客户端浏览器信息。
$remote_addr 客户端IP
$http_x_forwarded_for 当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的x_forwarded_for设置。
$request 完整的原始请求行,如 "GET / HTTP/1.1"
$remote_user 客户端用户名称,针对启用了用户认证的请求
$request_uri 完整的请求地址,如 "https://daojia.com/"
|
示例
1 2 3
| log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
|
设置error_log
语法
1 2 3
| # file 日志文件写入位置 # level 日志级别,debug, info, notice, warn, error, crit, alert,emerg,默认是error error_log file [level]
|
日志切割
由于请求量大的话会导致日志过大,可以使用定时任务来执行脚本进行日志切割
1 2 3 4 5 6 7 8
| LOGPATH=/Users/zhanghe/Desktop/user/myself BASEPATH=/Users/zhanghe/Desktop/user/myself/logs
bak=$BASEPATH/$(date -d yesterday +%Y%m%d%H%M).zhhll.access.log
mv $LOGPATH/access.log $bak # 向nginx主线程发送信号,用于重新打开日志文件 kill -USR1 `cat $PID`
|
使用定时任务
1 2 3 4
| # 编辑定时任务 crontab -e
0 1 * * * sh /Users/zhanghe/Desktop/user/myself/run.sh
|