uwsgi没有提供按天切割日志的配置,只提供了一个log-maxsize配置,当文件达到多大的时候自动切分,对于查找历史日志还是很不方便,我们一般是按照时间查询。
原理:配合sh+crontab脚本技术,用mv+touch-logreopen参数,移动日志文件后,让uwsgi重新打开日志并记录。
一、新增uwsgi配置
在uwsgi配置文件中,新增如下内容
#进程在后台运行,并将日志打印到指定文件 daemonize = ./logs/uwsgi.log #设置一个监听对象 touch-logreopen = ./logs/.touchforlogrotat
关于路径问题,大家根据自己的情况规划即可,因为uwsgi配置文件在项目根目录,因此上面的路径 ./logs/uwsgi.log的意思是在uwsi配置文件所在的目录中的一个文件夹logs,uwsgi.log就在logs这个文件夹内。
以上配置结合下面的脚本文件作用的原理是:当监听对象 touch-logreopen 所指向的文件被touch,时间戳改变后,当前的uwsgi.log文件会重新按照日期命名,并保存在相应的文件夹,同时uwsgi会重新新建uwsgi.log文件进行写入新日志,且不会中断当前程序的执行。如果没有touch-logreopen这个监听对象,是无法对uwsgi.log进行转储的。
二、创建shell脚本文件
在系统根目录的shell目录中,新建一个.sh的脚本文件uwsgi_log_cut.sh,内容如下:
#!/bin/bash
LOGDIR="/www/logs/" #当前日志所在目录
DATE=`date -d "yesterday" +"%Y-%m-%d"`
NEWDIR="/www/logs/history" #新建文件夹history用来放旧日志
mkdir -p ${NEWDIR}
mv ${LOGDIR}/uwsgi.log ${NEWDIR}/uwsgi-${DATE}.log #将旧日志重新以日期命名
touch /www/logs/.touchforlogrota
这里面的文件路径www在系统根目录。
三、创建定时任务
通过crontab设置定时任务,命令行下输入:
crontab -e
会进入一个当前用户的文件,在这个文件中添加下面这行操作:
0 0 * * * sh /shell/uwsgi_log_cut.sh #代表每天0点执行脚本 uwsgi_log_cut.sh
这里的原理就是每天0点执行系统根目录中shell文件夹中的uwsgi_log_cut.sh文件。
最后重启uwsgi,logs文件中的history文件夹都会有每天的日志了