ConcurrentLogHandler 在Windows下的问题解决

ConcurrentLogHandler 在Windows下的问题解决

问题描述

Python中的logging模块自带的一些handlers无法在多进程环境下使用,于是下载了Lowell Alleman's ConcurrentLogHandler的这个package。windows下安装时可能还需要安装pypiwin32pywin32不能用pip直接安装,而且pyenv下安装比较麻烦,所以推荐前者)。使用时出现了进程卡住的情况,查证之后发现是windows下的lock无法正常的获取和释放。

解决方法

  1. 进行环境判断
    在Linux环境下可以正常使用,但是windows下不行,所以可考虑将程序部署到Linux运行,本地windows测试时考虑使用非进程安全的handler调试。

  2. concurrent-log-handler
    Github上有位老哥修复了这个问题,并做成了可用的package,地址在这。安装完成后重新导入即可。
    下面贴下我的简单配置

LOGGING_CONFIG = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'verbose': {
            'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt': "%Y-%m-%d %H:%M:%S"
        },
        'simple': {
            'format': '%(message)s'
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        },
        'file': {
            'level': 'INFO',
            'class': 'concurrent_log_handler.ConcurrentRotatingFileHandler', #这里是重点
            'maxBytes': 1024 * 1024 * 10,
            'backupCount': 50,
            'delay': True,
            'filename': 'logs/logging.log',
            'formatter': 'simple'
        }
    },
    'loggers': {
        '': {
            'handlers': ['console', 'file'],
            'level': 'INFO',
        },
    }
}

使用方法

import os
from simple_settings import settings # 安利下这个配置管理库,挺好用的

os.environ['SIMPLE_SETTINGS'] = 'settings.development' # 把上面的配置存到development里面去
settings.setup()

logging.config.dictConfig(settings.LOGGING_CONFIG)
logger = logging.getLogger()

def test():
    logger.info("this is a test")

if __name__ == '__main__':
    test()

问题解决

猜你喜欢

转载自blog.csdn.net/wkb342814892/article/details/80281182
今日推荐