支持多进程日志按大小分割

由于python内置模块logging.handlers.RotatingFileHandler是不支持多进程下日志分割的,存在进程间竞争同一文件。在网上找到了支持多进程的日志分割方案。

参考 中文博客

参考 英文mrfh

多进程日志大小分割handler配置实例

  1. 安装mrfh模块

    pip install mrfh
  2. 由于mrfh用到了fcntl模块,只有linux才有所以在win下是不可用的
  3. 下面是一个日志配置的实例,在file_size_rotate_hd中就用到了mrfh提供的handler。
 LOGGER_CONFIG_DICT = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'detailed_fmt': {
'class': 'logging.Formatter',
'format': '%(asctime)s %(created)s %(levelname)-6s %(name)-15s %(processName)s:%(threadName)s %(message)s'
# human-readable timestamp levelname logger_name processname threadname message
},
'simple_fmt': {
'class': 'logging.Formatter',
'format': '%(asctime)s %(levelname)-8s %(name)-15s %(message)s'
# human-readable levelname logger_name message
},
'portal_fmt': {
'class': 'logging.Formatter',
# 'datefmt': '%Y-%m-%d %H:%M:%S,uuu', # 实际默认格式就是这个
'format': '%(asctime)s %(levelname)-8s %(name)-15s %(processName)-10s %(message)s'
},
'system_fmt': {
'class': 'logging.Formatter',
'format': '%(asctime)s %(name)-15s %(levelname)-8s %(processName)-10s %(message)s'
},
},
'handlers': {
'file_size_rotate_hd': {
#'class': 'logging.handlers.RotatingFileHandler',
'class': 'mrfh.MultiprocessRotatingFileHandler', # 这里就是用到mrfh了。
'filename': './logs/portal.log',
'mode': 'a',
'maxBytes': 1024 * 1024 * 500,
'backupCount': 50,
'formatter': 'portal_fmt'
},
'errors_hd': {
'class': 'logging.FileHandler',
'filename': './logs/errors.log',
'formatter': 'detailed_fmt',
'level': 'ERROR' # 只会错误40及以上的日志
},
'system_hd': {
'class': 'logging.FileHandler',
'filename': './logs/system.log',
'formatter': 'simple_fmt'
}
},
'loggers': {
'selfservices': {
'level': 'INFO',
'propagate': False,
'handlers': ['file_size_rotate_hd', 'errors_hd']
# 'handlers': ['time_rotate_file_hd', 'file_size_rotate_hd', 'errors_hd']
},
},
'root': {
'level': 'DEBUG',
'handlers': ['system_hd', 'errors_hd']
},
}

0x04 Python logger 支持多进程日志按大小分割的更多相关文章

  1. python logger 动态设置日志名

    代码: import logging logger = logging.getLogger('') logger.setLevel(level=logging.INFO) def setLogName ...

  2. Python入门之logging日志模块以及多进程日志

    本篇文章主要对 python logging 的介绍加深理解.更主要是 讨论在多进程环境下如何使用logging 来输出日志, 如何安全地切分日志文件. 1. logging日志模块介绍 python ...

  3. 【踩坑记录】记录一次使用Python logging库多进程打印日志的填坑过程

    背景: 项目使用Python自带的logging库来打印日志 项目部署在一台Centos7的机器上 项目采用gunicorn多进程部署 过程: 1.LOG日志代码封装: 采用logging库,并设置w ...

  4. python 多线程和多进程

    多线程与多进程 知识预览 一 进程与线程的概念 二 threading模块 三 multiprocessing模块 四 协程 五 IO模型 回到顶部 一 进程与线程的概念 1.1 进程 考虑一个场景: ...

  5. 笔记-python-module-logging.循环日志、多进程日志

    笔记-python-module-logging.循环日志.多进程日志 1.      logging循环日志 循环日志分为按大小切分和按时间切分,对应实现类如下. 1.1.  RotatingFil ...

  6. Python中使用多进程来实现并行处理的方法小结

    进程和线程是计算机软件领域里很重要的概念,进程和线程有区别,也有着密切的联系,先来辨析一下这两个概念: 1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和 ...

  7. 用 Python 写一个多进程兼容的 TimedRotatingFileHandler

    我前面有篇文章已经详细介绍了一下 Python 的日志模块.Python 提供了非常多的可以运用在各种不同场景的 Log Handler. TimedRotatingFileHandler 是 Pyt ...

  8. Python logger模块

    1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...

  9. Python模块学习 ---- logging 日志记录

    许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net,c++中,有人们熟悉的log4cp ...

随机推荐

  1. 论文阅读笔记六十二:RePr: Improved Training of Convolutional Filters(CVPR2019)

    论文原址:https://arxiv.org/abs/1811.07275 摘要 一个训练好的网络模型由于其模型捕捉的特征中存在大量的重叠,可以在不过多的降低其性能的条件下进行压缩剪枝.一些skip/ ...

  2. python 环境搭建 python-3.4.4

    第一步:下载和安装python-3.4.4amd.msi 可以去官方网站下载,也可以从网盘下载: 链接:https://pan.baidu.com/s/1dZ9ibgigKPdPUJgykLA_jg ...

  3. 数据结构——栈与递归(recursion)

    /* recursion.c */ /* 递归 */ #include <stdio.h> void interface(void); /* 斐波那契数列以及阶乘函数声明 */ long ...

  4. 动态规划 | 对输入进行hash处理的LIS 1045

    把序列M处理为有序序列,并且M不存在的序列要在A中删除. 对A进行了处理之后,执行LIS的操作(O(N^2)复杂度).当然可以优化为对数复杂度的,不过pat不卡这个. LCS解法:动态规划 | 保留重 ...

  5. UVA10559 方块消除 Blocks 题解

    设g[i][j][k]为消去区间[i,j]中的方块,只留下k个与a[i]颜色相同的方块的最大价值,f[i][j]为将[i,j]中所有方块消去的价值,转移自己yy一下即可. 为什么这样是对的?因为对于一 ...

  6. [LeetCode] 307. Range Sum Query - Mutable 区域和检索 - 可变

    Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...

  7. [LeetCode] 212. Word Search II 词语搜索之二

    Given a 2D board and a list of words from the dictionary, find all words in the board. Each word mus ...

  8. [LeetCode] 95. Unique Binary Search Trees II 独一无二的二叉搜索树之二

    Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ...

  9. config 文件读取

    在项目中我们经常要使用到config文件进行相应的配置,来使我们的项目更加灵活健壮. 最常见的就connetionStrings .appSettings这两个节点,那么我们怎么读取呢? 1.首先 我 ...

  10. CentOS7 Harbor 安装

    安装Harbor,首先要安装docker 和 docker-compose 1.安装docker   (1)安装一些必要的系统工具 $ yum install -y yum-utils device- ...