当前位置: 代码迷 >> 综合 >> uwsgi 日志切割
  详细解决方案

uwsgi 日志切割

热度:89   发布时间:2023-11-23 01:33:40.0

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