log_format: 格式化日志
log_format 语法
log_format formatName formatParams
log_format 语法描述
log_format 声明一个日志格式
formatName 格式化名称, 相当于函数名
formatParams 参数列表, 相当于函数体
log_format 参数列表
$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`
# 过期时间
expire=`date -v -30d +%Y%m%d`
# 日志目录
log_path="/usr/local/var/log/nginx/"
# 日志名称列表
log_names=("sdk" "api" "error" "access")
for log_name in ${log_names[@]}
do
# 切割日志
mv -f ${sdk_path}${log_name}.log ${sdk_path}${log_name}_${yesterday}.log
# 删除过期日志
rm -f ${sdk_path}${log_name}_${expire}.log
done
# 重新生成日志文件
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 -e
crontab 添加一行
0 0 * * * sh /usr/local/var/log/nginx/nginx_log_division.sh
查看是否添加成功
sh-3.2# crontab -l
举个栗子
编辑配置文件, 例如 nginx.conf
tianshl@tianshl ~ $ vim /usr/local/etc/nginx/nginx.conf
配置内容
events {
worker_connections 1024;
}
http {
# 声明sdk日志格式
log_format sdk_log '$remote_addr - $status';
# 声明api日志格式
log_format api_log $request_body;
server {
# 监听88端口
listen 88;
location /sdk {
# 输出sdk日志
access_log /usr/local/var/log/nginx/sdk.log sdk_log;
proxy_pass http://localhost:8888;
}
location /api {
# 输出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
测试结果
测试通过