nginx配置日志和定时分割日志
Nginx日志主要分为两种:
access_log(访问日志)和error_log(错误日志)。
通过访问日志我们可以得到用户的IP地址、浏览器的信息,请求的处理时间等信息。错误日志记录了访问出错的信息,可以帮助我们定位错误的原因。
设置access_log
作用域
可以应用access_log指令的作用域分别有http,server,location,limit_except。也就是说,在这几个作用域外使用该指令,Nginx会报错。
基本用法
access_log /usr/local/nginx/logs/www.nginx.log
不指定则使用nginx.conf里面,默认 log_format 格式
我们打开nginx.conf定位到log.format,配置
log_format main '$remote_addr - $remote_user - [$time_iso8601] - "$request" ' '-$status $body_bytes_sent -"$http_referer" ' '-"$http_user_agent" -"$http_x_forwarded_for"' '-"$request_uri"';
指定使用该格式
access_log /usr/local/nginx/logs/www.nginx.log main;
分割,打包,删除历史,日志
添加shell脚本 nginx-logs-rotate.sh
#!/bin/bash # Description: rotate nginx access logs LOGFILE="/usr/local/nginx/cron/cron.log" #分割和打包日志文件 NGX_PID=`cat /usr/local/nginx/logs/nginx.pid` LOGS_DIR="/usr/local/nginx/logs" #nginx默认log目录 WWW_LOG_NAME="www.nginx.log" #nginx默认log的名称 ACCESS_LOG_NAME="access.log" ERROR_LOG_NAME="error.log" PLACE_DIR="/usr/local/nginx/logs/place/" #nginx分割后log存放目录 LOG1="$(date +%F -d 'yesterday')_$WWW_LOG_NAME" #nginx分割后log的名称 LOG2="$(date +%F -d 'yesterday')_$ACCESS_LOG_NAME" LOG3="$(date +%F -d 'yesterday')_$ERROR_LOG_NAME" #分割 cd $LOGS_DIR mv $WWW_LOG_NAME $PLACE_DIR$LOG1 mv $ACCESS_LOG_NAME $PLACE_DIR$LOG2 mv $ERROR_LOG_NAME $PLACE_DIR$LOG3 /bin/kill -USR1 $NGX_PID #打包 if [[ $? == 0 ]]; then cd $PLACE_DIR tar czvf $(date +%F -d 'yesterday').tar.gz $LOG1 $LOG2 $LOG3 >> $LOGFILE #判断是否成功,则压缩。 echo "$LOG1 SUCCESSFUL!" >> $LOGFILE rm -f $LOG1 rm -f $LOG2 rm -f $LOG3 else echo "Fail!" >> $LOGFILE fi #删除历史日志 KEEPTIME=1 #定义需要删除的文件距离当前的天数 DELFILE=`find $PLACE_DIR -type f -mtime +$KEEPTIME -exec ls {} \;` #找到天数大于多少天的文件 for delfile in ${DELFILE} #循环删除满足天数大于多少天的文件 do rm -f $delfile done
加入crontab定时任务
crontab -e
0 0 * * * /usr/local/nginx/cron/nginx-logs-rotate.sh
分割前的日志
分割后打包的日志