log_format formatName formatParams
log_format 声明一个日志格式
formatName 格式化名称, 相当于函数名
formatParams 参数列表, 相当于函数体
$msec 日志写入时间
$remote_addr 客户端IP
$remote_user 客户端用户名
$http_user_agent 客户端浏览器信息
$http_x_forwarded_for 客户端IP(反向代理)
$time_local 请求时区
$time_iso8601 ISO8601格式时间
$request_time 请求时间
$connection 连接的序列号
$connection_requests 连接的请求数
$request 请求的URL和HTTP协议
$request_body 请求参数
$request_length 请求体长度
$status 请求的状态码
$http_referer 请求的源地址
$body_bytes_sent 返回体字节数(不包括相应头)
$bytes_sent 返回体总字节数
access_log: 输出日志
access_log 语法
access_log logPath [formatName]
access_log 语法描述
access_log 输出格式化的日志到日志文件
logPath 日志文件路径
formatName 格式化名称
切割日志
一.使用脚本切割
编辑脚本
tianshl@tianshl nginx $ vim nginx_log_division.sh
脚本内容
#! /bin/sh
yesterday=`date -v -1d +%Y%m%d`
log_path="/usr/local/var/log/nginx/"
sdk_path=${log_path}sdk
mv -f ${sdk_path}.log ${sdk_path}_${yesterday}.log
pid_path="/usr/local/var/run/nginx.pid"
sudo kill -USR1 `cat ${pid_path}`
定时任务
切换到root身份
tianshl@tianshl nginx $ sudo su root
编辑 crontab
sh-3.2
crontab 添加一行
0 0 * * * sh /usr/local/var/log/nginx/nginx_log_division.sh
查看是否添加成功
sh-3.2
二.不使用脚本切割
server 段增加以下代码
if ($time_iso8601 ~ "(\d{4})-(\d{2})-(\d{2})") {
set $time $1$2$3;
}
日志文件路径中增加日期参数
access_log /var/log/nginx/api-$time.log;
举个栗子
events {
worker_connections 1024;
}
http {
server {
listen 88;
if ($time_iso8601 ~ "(\d{4})-(\d{2})-(\d{2})") {
set $time $1$2$3;
}
location /sdk {
access_log /usr/local/var/log/nginx/sdk-$time.log;
proxy_pass http://localhost:8888;
}
}
}
栗子描述
1. 访问/sdk时会生成当天时间的日志文件,当文件存在时则追加内容,文件不存在时自动创建。
2. 同理可以按年、月、日、小时、分钟、秒等进行切割。
举个栗子
编辑配置文件, 例如 nginx.conf
tianshl@tianshl ~ $ vim /usr/local/etc/nginx/nginx.conf
配置内容
events {
worker_connections 1024;
}
http {
log_format sdk_log '$remote_addr - $status';
log_format api_log $request_body;
server {
listen 88;
location /sdk {
access_log /usr/local/var/log/nginx/sdk.log sdk_log;
proxy_pass http://localhost:8888;
}
location /api {
access_log /usr/local/var/log/nginx/api.log api_log;
proxy_pass http://localhost:8888;
}
}
}
重启 nginx
tianshl@tianshl ~ $ sudo nginx
nginx 启动成功后自动生成四个日志文件
tianshl@tianshl ~ $ cd /usr/local/var/log/nginx
tianshl@tianshl nginx $ ls
access.log api.log error.log sdk.log
查看日志
tianshl@tianshl nginx $ tail -f *.log
==> access.log <==
==> api.log <==
==> error.log <==
==> sdk.log <==
发起sdk请求并查看日志
==> sdk.log <==
127.0.0.1 - 502
测试结果
测试通过