• 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

    分割前的日志

    分割后打包的日志

     

  • 相关阅读:
    生物学上描述DNA/RNA的长度常用的kb、nt、bp是指什么
    置换检验代码, matlab codes for permutation tests
    MATLAB命令大全——以字母顺序进行分类
    2011年春季C语言课程设计指导书
    C/C++语言课程设计任务书
    hibernate 自动生成数据库表
    利用Tomcat的用户名和密码构建“永久”后门
    flex成品作不知道有哪位大神能看懂是干嘛的
    wikioi1014 装箱问题
    怎样把USB键盘接到Android手机上
  • 原文地址:https://www.cnblogs.com/suruozhong/p/12674757.html
Copyright © 2020-2023  润新知