nginx日志切割

nginx日志自动切割有利于分析查看日志
  • 1.日志配置
    1
    2
    3
    4
    5
    6
    7
    access.log 记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;
    error.log 记录服务器错误的日志;
    配置日志存储路径
    location / {
    access_log /usr/local/nginx/logs/access.log;
    error_log /usr/local/nginx/logs/error.log;
    }

nginx日志配置方法,默认已自动设置
mark

  • 2.日志切割

    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash  
    LOGS_PATH=/var/log/nginx/
    YESTERDAY=$(date -d yesterday +"%Y%m%d") #,%Y-%m-%d等于%F
    mv ${LOGS_PATH}/access.log ${LOGS_PATH}/logs/access_${YESTERDAY}.log
    #mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log
    ## 向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件
    kill -USR1 `cat ${LOGS_PATH}/nginx.pid`
    #kill -USR1 `cat /var/log/nginx/nginx.pid`
  • 3.设置定时任务

    1
    2
    3
    4
    crontab -e
    每天凌晨1分执行
    01 0 * * * /var/log/nginx/splitLog.sh
    重启定时任务

mark


补充
方式一:
  • nginx cronolog日志分割配置文档,根据下面方法,每分钟分割一次NGINX访问日志。
    1
    2
    3
    4
    5
    6
    7
    8
    1.nginx日志配置
    access_log access_log /data/access_log_pipe main;
    2.先创建一个命名管道
    mkfifo /www/log/access_log_pipe
    3.配置cronolog:
    nohup cat /data/access_log_pipe | /usr/local/sbin/cronolog /data/log/domain.access_%Y%m%d%H%M.log &
    4.启动Nginx
    /usr/local/nginx/sbin/nginx
1
2
3
4
5
6
7
8
9
注意:
cronolog必须在nginx启动前启动
没有安装cronolog的话,需要先安装
wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
tar zxvf cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure
make
make install
方式二:
  • 定时任务中每小时添加定时任务,执行一下脚本,可以实现小时日志分割。
    1
    2
    3
    4
    5
    log_dir="/var/log/nginx"
    date_dir=`date +%Y/%m/%d/%H`
    /bin/mkdir -p ${log_dir}/${date_dir} > /dev/null 2>&1
    /bin/mv ${log_dir}/access.log ${log_dir}/${date_dir}/access.log
    kill -USR1 `cat /opt/nginx/logs/nginx.pid`
方式三:
  • 使用logrotate做nginx日志轮询
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    logrotate看名字就知道是专门做日志轮询的,只把任务配置放在/etc/logrotate.d/下,任务就会自动完成,而且无需安装,系统自带,比较推荐使用.
    vim /etc/logrotate.d/nginx
    /usr/local/nginx/logs/www.willko.cn.log /usr/local/nginx/logs/nginx_error.log {
    notifempty
    daily
    sharedscripts
    postrotate
    /bin/kill -USR1 `/bin/cat /usr/local/nginx/nginx.pid`
    endscript
    }

多个日志以空格分开,
notifempty 如果日志为空则不做轮询
daily 每天执行一次
postrotate 日志轮询后执行的脚本
这样,每天都会自动轮询,生成nginx.log.1-n

-------------本文结束感谢您的阅读-------------
原创技术分享,感谢您的支持。