uwsgi和nginx的log同样都是在一个文件名上写log,没法按天进行rotate,因此单个文件的体积会愈来愈大,不利于log的备份。nginx
在网络上研究了nginx的log切分方法,原理比较简单。shell
我想这种方法也是应该能够应用到uwsgi上面的。可是没有那么容易。bash
与想象中的彻底不同。发现uWSGI的reload操做根本重不会新打开log文件。这样就须要变动一下思路了。网络
参数 touch-logreopen
能够从新打开日志。spa
logto = /data/log/MODULE/uwsgi.log touch-logreopen=/data/log/MODULE/.touchforlogrotate
touch-logreopen
当指定的文件被touch事后,时间戳发生变化,会让uWSGI从新打开日志文件,而且不会终止当前的服务(不是stop+start,而是reload的概念)。日志
#!/bin/bash module="module_name" DIR=`echo $(cd "$(dirname "$0")"; pwd)` #获取当前目录 LOGDIR="/data/log/$module/" #log目录 sourcelogpath="${LOGDIR}uwsgi.log" #log源地址 touchfile="${LOGDIR}.touchforlogrotate" #须要touch的文件 DATE=`date -d "yesterday" +"%Y%m%d"` destlogpath="${LOGDIR}uwsgi-${DATE}.log" #重命名后的文件 mv $sourcelogpath $destlogpath #echo $touchfile touch $touchfile # 更新文件时间戳
而后在 crontab
中加入这个,让天天0点0分的时候切分日志,固然了也能够23点59分,不过要更改一下shell脚本。code
* * * /data/you_module_name/bin/uwsgirotate.sh > /dev/null 2>&1
固然了,也能够不用crontab,若是你有 logrorate
服务,能够往里面添加一些事件,来进行日志的滚动。事件