uwsgi log rotate按天切割日志

uwsgi和nginx的log同样都是在一个文件名上写log,没法按天进行rotate,因此单个文件的体积会愈来愈大,不利于log的备份。nginx

nginx的log切分方法

在网络上研究了nginx的log切分方法,原理比较简单。shell

  1. 先重命名文件,mv access.log access-20150215.log
  2. 而后reload一下nginx。
  3. nginx继续在access.log上写log

我想这种方法也是应该能够应用到uwsgi上面的。可是没有那么容易。bash

尝试应用到uwsgi

  1. 先重命名文件,mv uwsgi.log uwsgi-20150215.log
  2. 而后reload一下uwsgi。
  3. 没有看到uwsgi.log文件

与想象中的彻底不同。发现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服务,能够往里面添加一些事件,来进行日志的滚动。事件

相关文章
相关标签/搜索