Nginx的日志配置如下:
#定义日志打印的格式
log_format channel_access '$remote_addr $remote_user [$time_local] "$host" "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $cookie_channel $cookie_dvid $cookie_cityId $cookie_pnid to "$upstream_addr" t $upstream_response_time s "$upstream_status" t $request_time "$http_x_forwarded_for" $request_length';
# 声明log log文件路径 log格式
access_log /var/log/nginx/access.log channel_access;
上面是http作用域下的日志配置,除此之外,nginx还有server和location作用域可以配置日志,日志级别 location > server > http 。
nginx的日志如果不做切分的话会在一个文件中一直追加,导致日志文件越来越大,所以通过编写脚本来实现控制日切的功能,同时清理存在超过30天的文件。
脚本如下:
#!/usr/bin/bash
# 日志存放天数
DAYS=7
# 日志文件存放目录
logs_path=/var/log/nginx/access.log
# nginx进程pid
nginx_pid=`cat /usr/local/openresty/nginx/logs/nginx.pid`
# 日志名称
logs_name=$(date -d "yesterday" +%Y%m%d)
# 改名
mv $logs_path/access.log $logs_path/$logs_name.log
#向nginx主进程发信号重新打开日志
kill -USR1 $nginx_pid
# 保存7天
find /var/log/nginx/ -mtime +$DAYS -name "*.log" -exec rm -rf {} \;
添加系统定时任务(/etc/crontab)
crontab -e
#每天0时1分进行日志分割
01 00 * * * /web/nginx/logs/cut_nginx_log.sh
#重启Linux定时任务
crond restart
保存生效
crontab /etc/crontab
Nginx 的信号控制
信号 | 功能 |
---|---|
HUP | 重启 |
QUIT | 从容关闭 |
TERM,INT | 快速关闭 |
USER1 | 重置日志 |
USER2 | 平滑升级 |
WINCH | 从容关闭进程 |
使用方法
kill -信号 主进程号
#不用关闭nginx进程就可以重读日志,此命令可以用于nginx的日志定时备份,按月/日等时间间隔分割有用
kill -USR1 nginx主进程号