uWSGI按时间进行日志分片

admin 2021年9月1日14:56:06评论162 views字数 1060阅读3分32秒阅读模式

0x00 概述

首先,uWSGI没有提供原生的日志分片功能,目前好像只有按大小进行分片的功能log-maxsize。因此我们只能手动来实现按天(或者其他时间段)来进行日志的切割。

0x01 使用工具

logrotate

0x02 uWSGI配置

首先,我们在uwsgi.ini配置文件中,新增关于日志的配置项:

logto = /path/for/you/log
touch-logreopen = /path/for/you/touch/file

这里的logto很好理解,就是日志存储的位置,而touch-logreopen则是一个trigger,具体作用我们结合下面的logrotate再说。

0x03 Logrotate配置

我们将日志的配置文件放在/etc/logrotate.d/下面,例如
/etc/logrotate.d/uwsgi

/var/log/uwsgi/app.log {
    daily       # 每日分片
    rotate 30   # 最多储存30份
    compress    # 储存的日志采用gzip压缩
    create
    postrotate  # 分片后执行的脚本
        touch /var/log/uwsgi/app.touch
    endscript
}

这里的第一行是日志的位置,而下面的参数如注释所述。
其中,比较重要的是postrotate下的脚本。
这里我们要明白一点就是,uWSGI不会reopen日志文件。换句话说,当你将日志app.log分片时,旧的日志会被命名为app.log.1.gz,而app.log则会是一个新的空文件。在这时,uWSGI并不会重新打开app.log文件来写入日志,而是直接继续往app.log.1.gz写入日志。因此,我们需要一个事件来触发uWSGI重新打开日志文件,将接下来的日志写入app.log里。
为了达到这个目的,uWSGI提供了touch-logreopen配置。这个配置的意思是,uWSGI监控一个文件,当这个文件的写入时间被更新的时候,就自动重新打开日志文件。因此,我们需要在logrotate的配置中写入一个脚本,让其在每次分片之后能够touch一下这个文件,改变其修改时间,让uWSGI正确地重新打开日志文件。

FROM :rickyhao.com | rickyhao.com

相关推荐: DDCTF-WEB&MISC-WRITE-UP

DDCTF-WEB&MISC-WRITE-UP MISC 0X01.签到题 flag在公告里面,赛前一天我就知道了23333333…   0X02.(╯°□°)╯︵ ┻━┻ 题目: d4e8e1f4a0f7e1f3a0e6e1f3…

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年9月1日14:56:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   uWSGI按时间进行日志分片http://cn-sec.com/archives/499672.html

发表评论

匿名网友 填写信息