百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>服务器> linux中uwsgi log rotate按天切割日志例子
分享文章到:

linux中uwsgi log rotate按天切割日志例子

发布时间:01/15 来源: 浏览: 关键词:
如果一个日志文件不按日期或大小进行处理会导致一个日志文件几个GB了,这样我们无法分析日志了,按正常的我们会进行切割日志了,下面整理了一些切割日志的例子.

uwsgi和nginx的log一样都是在一个文件名上写log,无法按天进行rotate,所以单个文件的体积会越来越大,不利于log的备份。

nginx的log切分方法

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

先重命名文件,mv access.log access-20150215.log
然后reload一下nginx。
nginx继续在access.log上写log
我想这种方法也是应该可以应用到uwsgi上面的。但是没有那么容易。

尝试应用到uwsgi

先重命名文件,mv uwsgi.log uwsgi-20150215.log
然后reload一下uwsgi。
没有看到uwsgi.log文件
与想象中的完全不一样。发现uWSGI的reload操作根本重不会新打开log文件。这样就需要变更一下思路了。

解决方案一

参数touch-logreopen可以重新打开日志。


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脚本。


00 00 * * * /data/you_module_name/bin/uwsgirotate.sh  > /dev/null 2>&1

当然了,也可以不用crontab,如果你有logrorate服务,可以往里面添加一些事件,来进行日志的滚动。

解决方法二

官方说参数log-maxsize <bytes>,可以让uWSGI的日志文件达到一定大小后重新打开。不过我记得当达到一定大小后,并没有重新写入到uwsgi.log文件中,比较奇怪。而且按日志大小来切分,感觉没有按时间来切分的好。

解决方案三

使用参数log-master,让主进程监听一些信号,当想master进程发送信号后,日志就会重新打开,这个也是要配合mv操作先更改文件名才能的

补充:nginx日志切割及7天前的历史日志删除脚本

下面这个日志切割脚本,按日期切割nginx日志,并自动删除7天前的日志(日志均已同步至专用日志存储服务器,可放心删除历史日志。)

#!/bin/bash
#初始化
LOGS_PATH=/data/nginx/logs/www.domain.com
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
#按天切割日志
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
#向 Nginx 主进程发送 USR1 信号,重新打开日志文件,否则会继续往mv后的文件写内容,导致切割失败.
kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`
#删除7天前的日志
cd ${LOGS_PATH}
find . -mtime +7 -name "*20[1-9][3-9]*" | xargs rm -f
exit 0

将这个脚本添加到计划任务,每天执行一次即可:

1 0 * * * /usr/local/script/cut_del_logs.sh

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有57人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板