问题:nginx会按照nginx.conf的配置生成access.log和error.log,随着访问量的增长,日志文件会越来越大,既会影响访问的速度(写入日志时间延长),也会增加查找日志的难度,nginx没有这种按天或更细粒度生成日志的机制。总共两种方法:1.写脚本,通过定时任务按天重命名日志、重启nginx的方法实现(有重启失败的风险)2.通过工具cronolog实现。推荐方法二,所以只介绍第二个方法。

1.下载安装cronolog

下载地址:链接: https://pan.baidu.com/s/1S-6xFqdSIDipeWRnZXTLcw 密码: gsbo

2.安装

2.1 解压缩
1
tar zxvf cronolog-1.6.2.tar.gz
2.2 进入安装文件所在目录
1
cd cronolog-1.6.2
2.3 运行安装
1
2
3
./configure
make
make install
2.4 查看cronolog安装后所在目录(验证安装是否成功)
1
which cronolog

一般情况下显示为:/usr/local/sbin/cronolog

3.使用cronolog

3.1 创建命名管道
1
mkfifo /usr/local/nginx/access_log_pipe
3.2 配置cronolog,日期按天

如果按小时使用access_%Y-%m-%d-%H.log;如果按分钟使用access_%Y-%m-%d-%H-%M.log

3.3 修改配置/usr/local/nginx/conf/nginx.conf
1
2
3
4
...
access_log /usr/local/nginx/access_log_pipe main;
error_log /usr/local/nginx/error_log_pipe debug;
...

修改完后分别运行nohup命令

1
nohup cat /usr/local/nginx/access_log_pipe | /usr/local/sbin/cronolog /home/logs/nginx/access/access-%Y-%m-%d.log 2>&1 &
1
nohup cat /usr/local/nginx/error_log_pipe | /usr/local/sbin/cronolog /home/logs/nginx/error/error-%Y-%m-%d.log 2>&1 &
3.4 重启nginx

4. 新建sh,删除5天前的,并添加定时任务

1
2
3
4
5
access_log_path="/home/logs/nginx/access/"
error_log_path="/home/logs/nginx/error/"
save_days=30
find $access_log_path -mtime +$save_days -name "*.*" -exec rm -rf {} \;
find $error_log_path -mtime +$save_days -name "*.*" -exec rm -rf {} \;
1
2
3
4
[root@localhost sh]# crontab -e

#! /bin/bash
00 00 * * * /bin/sh /home/logs/nginx/delete_nginx_logs.sh