一、问题描述

项目中,使用RotatingFileHandler根据日志文件大小来切分日志。设置文件的MaxBytes为1GB, backupCount大小为5。

经查看,发现日志文件的大小均小于10MB,且每个回滚日志文件的写入时间也都比较接近。

二、分析

日志文件过小,猜测是代码有问题,或者是文件内容有丢失;日志写入时间接近猜测是同时写入的问题。

经检查,代码没有问题,排除此原因。考虑当前使用gunicorn的多进程启动程序,多半是多个进程同时写入当个文件造成日志文件丢失。

logging模块是线程安全的,但并不是进程安全的。

如何解决此问题呢?首先先过一遍Python的logging模块在处理日志回滚的具体实现方法。

2.1 logging模块实现日志回滚

logging中RotatingFileHandler类和TimedRotatingFileHandler类分别实现按照日志文件大小和日志文件时间来切分文件,均继承自BaseRotatingHandler类。

BaseRotatingHandler类中实现了文件切分的触发和执行,具体过程如下:

def emit(self, record):

"""

try:

if self.shouldRollover(record):

except Exception:

复制代码

具体的执行过程shouldRollover(record)和doRollover()函数则在RotatingFileHandler类和TimedRotatingFileHandler类中实现。

以RotatingFileHand

python日志模块 超量处理_Python日志模块-多进程日志记录相关推荐

  1. 在python中requests模块怎么安装_Python requests模块在Windows下安装

    发现一个爬虫库太方便了,而且支持python3! 安装方法在http://docs.python-requests.org/en/latest/user/install/#install很详细 只不过 ...

  2. python logging模块详解_python logging模块使用总结

    目录 logging模块 日志级别 CRITICAL 50 ERROR 40 WARNING 30 INFO 20 DEBUG 10 logging.basicConfig()函数中的具体参数含义 f ...

  3. python有哪些模块安全方向_Python 常用模块

    模块 用一坨代码实现了某个功能的代码集合 模块分为三种 · 自定义模块 · 第三方模块 · 内置模块 1)自定义模块 自己编写并存在在某个路径下的python程序,实现了某个功能,可以被其他程序调用 ...

  4. python 路径往上一层_Python常用模块之模块、包介绍和相关语法

    在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很 ...

  5. python什么时候用框架_python时间模块的使用

    前言: 在开发中经常会与时间打交道,如:获取事件戳,时间戳的格式化等,这里简要记录一下python操作时间的方法. python中常见的处理时间的模块: time:处理时间的模块,如获取时间戳,格式化 ...

  6. python中模块的概念_Python中模块的概念

    """ 模块搜索顺序 sys.path 查看搜索顺序 """ """ 编程语言中,库.包.模块是同一种概念,是 ...

  7. python中大括号是什么_Python中模块(Module)和包(Package)到底是什么,有什么区别?...

    1. 模块(Module) 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个 ...

  8. python中的帮助系统_python系统模块

    Python中大多数系统接口都集中在两个模块:sys和os.这么说有点过于简单化 还有一些其他的表转模块也属于这个领域他们包括: glob 用于文件名的扩展 socket 用于网络连接和进程间通信(I ...

  9. python获取模块的名称_Python获取模块名称

    每个模块都有一个名字,在模块中的语句能够找出它所在的模块的名字.这对于搞清楚模块是否正在运行或被导入这样的特殊用途是很方便的.正如前面提到的,当一个模块被第一次导入时,其所包含的代码被执行.我们可以通 ...

  10. 怎么进入python 的venv文件夹_python虚拟环境模块venv使用及示例

    相信只要学习python的同学对于虚拟环境这个概念肯定不会太陌生,虚拟环境指的是一个个单独隔离的python开发环境.各个虚拟环境之间互不干扰,都有自己独立的开发包.就像是在电脑上装了很多个虚拟机,每 ...

最新文章

  1. Windows 程序员必备的知识和工具
  2. sass和less的优缺点
  3. python getopterror_python3 getopt用法
  4. [html] html和html5有什么区别呢?
  5. 第十九节: 结合【表达式目录树】来封装EF的BaseDal层的方法
  6. php 检查数组为空_检查数组是否为空在PHP中
  7. 面试后要请你吃饭_面试问同事请吃饭唯独不叫你咋办?小伙说这是好机会,当场被录取...
  8. 关于GCC的理解——On the understanding of the GCC
  9. 门当户对的感情真的很重要吗?
  10. Python opencv 简单的车牌识别 —— 简单学习
  11. plecs中以RLC为例介绍c-scripe建立微分方程的过程
  12. Unity中LitJson的使用
  13. qq红包领取支付宝红包功能,qqxml跳转技术
  14. 视频接口的种类及数据类型
  15. LaTex编辑器编辑公式
  16. Vue中设置浏览器标签栏图标以及title
  17. 苹果cms试看提示文字怎么改[苹果CMS技术教程]
  18. SketchUp模型组件【iMod · 精选244 —— 现代卧室SU模型】
  19. linux下僵尸进程(<defunct>进程)的产生与避免
  20. anaconda安装及配置

热门文章

  1. Kettle出现问题:Couldn‘t load class解决方案
  2. matlab 柱状图_Matlab入门4-(伪)玫瑰
  3. Android常用的五种布局
  4. 新装的Ubuntu 18.4 系统不显示以太网连接
  5. 根据2个经纬度点,计算这2个经纬度点之间的距离(通过经度纬度得到距离)
  6. 如何在C#中用连接ACCESS数据库
  7. 将自己的Access数据库通讯录导入手机通讯录
  8. 建堆的时间复杂度分析
  9. 02讲 | 51单片机按键外部中断实现LED灯的亮灭
  10. java 仿qq庅_[源码和文档分享]基于java 的仿QQ聊天工具