留言板  |    文章总数=102  |    RSS订阅
谁说金钱买不到时间,网管再续两个小时毒鸡汤

uwsgi日志按天分割保存

2020-01-07     loonlog     1050     0

      最近网站被频繁的攻击,需要经常查看uwsgi日志,进行分析,查找可疑ip,进行黑名单设置;在查看uwsgi日志的时候发现uwsgi日志很大,有上百M,下载很不方面,并且打开日志和查看日志均不是很方便;

      最理想的就是每天一个日志文件,方面管理和查看。

      uwsgi没有提供按天切割日志的配置,只提供了一个log-maxsize配置,当文件达到多大的时候自动切分,对于查找历史日志还是很不方便,我们一般是按照时间查询。

      我是小白,根据网上的资料,归纳总结,并加以菜鸟备注呈现给大家;

原理就是:配合sh+crontab脚本技术,用mv+touch-logreopen参数,移动日志文件后,让uwsgi重新打开日志并记录。

系统:centos 7  (其他系统也是一样的)

应用:django + uwsgi + nginx 的 web 应用  (只要有uwsgi,配置也是一样的)

1、在uwsgi的配置文件 uwsgi.xml 中,添加 touch-logreopen配置

(我的情况是uwsgi 的配置文件在django项目根目录下,其他情况也是一样的原理):

<uwsgi> 
   
   ...
    
   <!-- 进程在后台运行,并将日志打印到指定文件 -->  
   <daemonize>./logs/uwsgi.log</daemonize>
   <!-- 进程在后台运行,并将日志打印到指定文件 -->
   <touch-logreopen>./logs/.touchforlogrotat</touch-logreopen>
   
</uwsgi>

如果你的uwsgi配置文件是 ini 格式的,可以新增如下内容

#进程在后台运行,并将日志打印到指定文件 
daemonize = ./logs/uwsgi.log 
#设置一个监听对象 
touch-logreopen = ./logs/.touchforlogrotat

关于路径问题,大家根据自己的情况规划即可,因为uwsgi配置文件在项目根目录,因此上面的路径 ./logs/uwsgi.log的意思是在uwsi配置文件所在的目录中的一个文件夹logs,uwsgi.log就在logs这个文件夹内。

以上配置结合下面的脚本文件作用的原理是:当监听对象 touch-logreopen 所指向的文件被touch,时间戳改变后,当前的uwsgi.log文件会重新按照日期命名,并保存在相应的文件夹,同时uwsgi会重新新建uwsgi.log文件进行写入新日志,且不会中断当前程序的执行。如果没有touch-logreopen这个监听对象,是无法对uwsgi.log进行转储的。

2、创建脚本文件

在系统根目录的shell目录中,新建一个.sh的脚本文件uwsgi_log_cut.sh,内容如下:

#!/bin/bash
LOGDIR="/www/logs/"    #当前日志所在目录
DATE=`date -d "yesterday" +"%Y-%m-%d"`
NEWDIR="/www/logs/history"   #新建文件夹history用来放旧日志
mkdir -p  ${NEWDIR}
mv ${LOGDIR}/uwsgi.log   ${NEWDIR}/uwsgi-${DATE}.log   #将旧日志重新以日期命名
touch /www/logs/.touchforlogrota

这里面的文件路径www在系统根目录,我django项目就在www文件夹。


3、脚本的运行设置

通过crontab设置定时任务,命令行下输入:

crontab -e

会进入一个当前用户的文件,在这个文件中添加下面这行操作:

'''
* * * * * 执行任务
第一个* 一小时当中的第几分钟:0-59
第二个* 一天当中的第几个小时:0-23
第三个* 一月当中的第几天:1-31
第四个* 一年当中的第几个月:1-12
第五个* 一周当中的第几个星期:0-7 0,7都代表周日
'''
0 0 * * * sh  /shell/uwsgi_log_cut.sh  #代表每天0点执行脚本 uwsgi_log_cut.sh

这里的原理就是每天0点执行系统根目录中shell文件夹中的uwsgi_log_cut.sh文件。

最后重启uwsgi,logs文件中的history文件夹都会有每天的日志了


以上的路径大家不要弄混淆,根据你的结构进行设置即可。有问题可以留言,我也是小白,说的有点啰嗦,请谅解一下;以上的脚本写法有很多,我也没太理解,我现在这个我认为精明扼要。

django , uwsgi

    觉得有用?请点击页面顶部广告支持我!

您可能感兴趣的文章

发表评论(关于评论)

评论列表,共 0 条评论

  • 暂无评论