关于 python logging.config.dictConfig 的问题

Problems about python logging.config.dictConfig

最近在研究记录一些消息的logging模块。我想将自定义的日志路径传递给 dict 配置。为了方便调用,我把一些代码封装成一个class.

现在我的问题是当我调用它时,它不起作用。我期望的效果是将消息记录到控制台和 /tmp/xxxx.log.

这是代码。(抱歉我的英语不好)

#!/usr/bin/env python3

import logging
from logging.config import dictConfig

debug = True

class RequireDebugTrue(logging.Filter):
    def filter(self, record):
        return debug 

logconf_dict = {
    'version': 1,
    'disable_existing_loggers': False,

    'formatters': {
        'debug_fmt': {
            'format': '[%(asctime)s][%(threadName)s:%(thread)d][%(name)s:'
                '%(levelname)s][%(module)s:%(funcName)s(%(lineno)d)]:%(message)s'
        },
        'prod_fmt': {
            'format': '[%(asctime)s][%(name)s:%(levelname)s]'
                '[%(module)s:%(funcName)s(%(lineno)d)]:%(message)s'
        }
    },

    'filters': {
        'require_debug_true': {
            '()': RequireDebugTrue,
        }
    },

    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'debug_fmt',
            'filters': ['require_debug_true']
        },
        'localfile': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'formatter': 'prod_fmt',
            'filename': '/tmp/running.log',
            'maxBytes': 1024 * 1024 * 5,
            'backupCount': 5,
            'encoding': 'utf8'
        },
    },

    'loggers': {
        'debug_mode': {
            'handlers': ['console', 'localfile'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'prod_mode': {
            'handlers': ['localfile'],
            'level': 'DEBUG',
            'propagate': True,
        },
    }
}

class Get_Logger(object):

    def __init__(self, logfile, log_handler):
        self.log_handler = log_handler
        self.logfile = logfile

    def get_logger(self):
        logconf_dict["handlers"]["localfile"]["filename"] = self.logfile
        dictConfig(logconf_dict)
        logger = logging.getLogger(self.log_handler)
        return logger

if __name__ == '__main__':
    logfile = "/tmp/xxxx.log"
    logger_obj = Get_Logger("debug_mode", logfile)
    logger = logger_obj.get_logger()
    logger.debug("This is one test.")

如果我禁用封装代码,直接调用里面的代码,就可以了。像这样的好代码:

logconf_dict["handlers"]["localfile"]["filename"] = "/tmp/xxxx.log"
dictConfig(logconf_dict)
logger = logging.getLogger("debug_mode")
logger.debug("This is one test.")

谁能帮帮我?

解决办法就是改变日志文件和log_handler之间的位置。 错误的代码行:def init(self, logfile, log_handler): 右代码行:def init(self, log_handler, logfile): 我真傻。抱歉打扰了。