服务器出现问题后,需要从uwsgi的日志文件分析原因,但是uwsgi没有提供按天的日志切割配置,只提供了一个log-maxsize配置,当文件达到多大的时候自动切分,对于查找历史日志还是很不方便。
这里可以用mv+touch-logreopen参数,移动日志文件后,让uwsgi重新打开日志记录,不过需要配合sh+crontab
1. 指定touch-logreope文件,
#uwsgi.ini文件中指定
[uwsgi]
master = true #以守护进程运行
touch-logreopen = %d./touchforlogrotat #指定监听文件,修改后重新打开日志
daemonize = %d./uwsgi.daemonize.log #日志路径
这里我们指定日志文件就在项目目录下叫uwsgi.daemonize.log,监听项目目录下的touchforlogrotat文件,如果文件发生变化,就重新打开日志,我们可以先将当前的uwsgi.daemonize.log文件移动到别的地发,再touch一下touchforlogrotat,之前的文件便停止写入,重新生成了一个叫uwsgi.daemonize.log文件。
2. 自动脚本
在当前项目下新建一个touchforlogrotate.sh,并新建日志文件备份的日志,这里就放在项目中的logs文件夹
#!/bin/bash
DIR=`echo $(cd "$(dirname "$0")"; pwd)`
LOGDIR="${DIR}/logs"
sourcelogpath="${DIR}/uwsgi.daemonize.log"
touchfile="${DIR}/touchforlogrotate"
DATE=`date -d "yesterday" +"%Y%m%d"`
destlogpath="${LOGDIR}/uwsgi.daemonize.${DATE}.log"
mv $sourcelogpath $destlogpath
touch $touchfile
3. crontab定时调用
0 0 * * * sh /projectpath/touchforlogrotate.sh
好了,重启uwsgi,每天los文件夹下便会有每天的日志了。