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服務,能夠往裏面添加一些事件,來進行日誌的滾動。事件

相關文章
相關標籤/搜索