up主使用nginx+uwsgi+flask,下面主要解决日志按天切割。
服务器出现问题后,需要从uwsgi的日志文件分析原因,但是uwsgi没有提供按天的日志切割配置,只提供了一个log-maxsize配置,当文件达到多大的时候自动切分,对于查找历史日志还是很不方便。
这里可以用mv+touch-logreopen参数,移动日志文件后,让uwsgi重新打开日志记录,不过需要配合sh+crontab
1. 指定touch-logreope文件:
[uwsgi]touch-logreopen = /tmp/uwsgi.flask/touchforlogrotate.sh # 该文件变动时重新指定新的输出流到daemonize
daemonize = /tmp/uwsgi.flask/server.log
这里把uwsgi的日志放在了/tmp/uwsgi.flask/下,这里有个trick,既touch-logreopen参数监控的文件就是后面要定时执行的shell脚本本身。可以精简一个空白文件。
2. 自动脚本
创建一个自动sh脚本放在日志目录/tmp/uwsgi.flask/下:
#!/bin/bashDIR=`echo $(cd "$(dirname "$0")"; pwd)`
echo $(dirname "$0") $DIR $0 `pwd`
# LOGDIR="${DIR}"sourcelogfile="${DIR}/server.log"
touchfile="$0"DATE=`date -d "yesterday" +"%Y%m%d"`
destlogpath="${DIR}/uwsgi.flask.${DATE}.log"mv $sourcelogfile $destlogpath
touch $touchfile
3. crontab定时调用
0 0 * * * sh /tmp/uwsgi.flask/touchforlogrotate.sh
重启uwsgi,每天0时自动执行时,会把昨天的server.log对应到昨天日期的log文件。随着最后脚本touch了自己,今天又是全新的server.log。至此,就可以实现简单的日志按日期分片啦。
参考:
https://www.jianshu.com/p/6609fc915139