欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

0x04 Python logger 支持多进程日志按大小分割

程序员文章站 2022-05-18 21:25:23
支持多进程日志按大小分割 === [toc] 由于python内置模块logging.handlers.RotatingFileHandler是不支持多进程下日志分割的,存在进程间竞争同一文件。在网上找到了支持多进程的日志分割方案。 参考 [中文博客]( https://www.kawabangga ......

目录

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

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

多进程日志大小分割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']
        },
    }