zoukankan      html  css  js  c++  java
  • 0x04 Python logger 支持多进程日志按大小分割

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

    由于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']
            },
        }
    
  • 相关阅读:
    学习python第四天——列表方法
    昨天休息了一天,今天补上。列表学习
    第二天学习——字符串的方法
    mongodb
    linux学习篇(一)
    mysql优化
    linux服务
    vue配置服务器
    photoshop学习
    关于视图
  • 原文地址:https://www.cnblogs.com/ZJiQi/p/11578895.html
Copyright © 2011-2022 走看看