天行健,君子以自强不息;地势坤,君子以厚德载物;

Python普通日志与uWSGI日志的转储

uWSGI的日志转储经过验证使用logrotate是不可行的,uwsgi本身提供根据文件大小来rotate的功能,如果想要通过日期每天转储,首先需要使用touch-logreopen来设置一个监听对象,在uwsgi配置中添加:

daemonize=/data/logs/uwsgi/uwsgi.log

# 使得uwsgi.log文件被转存后能继续在uwsgi.log文件中写入日志,且不会中断当前程序的执行
touch-logreopen =/data/logs/uwsgi/.touchforlogrotat

创建轮询触发脚本touchforlogrotat.sh

#!/bin/bash

## 0 0 * * * root sleep 2 ; /PATH/touchforlogrotat.sh &> /dev/null

DIR=`echo $(cd "$(dirname "$0")"; pwd)`
LOGDIR="/data/logs/uwsgi"

sourcelogpath="${LOGDIR}/uwsgi.log"
touchfile="${LOGDIR}/.touchforlogrotat"

DATE=`date -d "yesterday" +"%Y%m%d"`
destlogpath="${LOGDIR}/uwsgi-${DATE}.log"
mv $sourcelogpath $destlogpath

touch $touchfile

当监听对象touch-logreopen所指向的文件被touch,时间戳改变后,uwsgi会重新打开uwsgi.log文件进行写入,且不会中断当前程序的执行。如果没有touch-logreopen这个监听对象,是无法对uwsgi.log进行转储的。

通过crontab设置定时任务,设定每天日志定时轮询。

Python脚本中的调试信息,也会输出到日志中,通过print等相关语句输出到日志,方便脚本功能调测。

点赞

发表回复