0%

Nginx日志设置

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

欢迎关注我的其它发布渠道