尝试基于字典的日志记录配置时出现Python ValueError

时间:2016-08-30 04:50:27

标签: python-3.x logging

我试图编写基于字典的日志记录配置,并且在运行程序时遇到的ValueError难以理解。我已将其剥离到必需品,问题仍然存在。我已经阅读了3.5文档,记录了HOWTO,Logging Cookbook等,但不幸的是,解决方案还没有出现。任何帮助将不胜感激。

另外,我只有3个星期进入python,所以我可能只是在这一点上超出我的深度。这是代码......

import logging.config

log_config = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters':{
        'verbose_formatter':{
            'format':'%(levelname)s: %(name)s: %(asctime)s.%(msecs).03d : '\
            '%(message)s: %(process)s: %(processName)s',
            'datefmt':'%Y-%m-%d %H:%M:%S'
        },
        'precise_formatter':{
            'format':'%(levelname)s: %(name)s: %(asctime)s.%(msecs).03d : '\
            '%(message)s',
            'datefmt':'%Y-%m-%d %H:%M:%S'
        },
        'brief_formatter':{
            'format':'%(levelname)s: %(message)s'
        }
    },
    'handlers':{
        'con_handler':{
            'class':'logging.StreamHandler',
            'level':'DEBUG',
            'formatter':'precise_formatter',
            'stream':'ext://sys.stdout'
        },
        'file_handler':{
            'class':'logging.handlers.RotatingFileHandler',
            'filename':'logger.log',
            'maxBytes':1048576,
            'backupCount':4,
            'level':'DEBUG',
            'formatter':'precise_formatter',
            'encoding':'utf8'
        }
    },
    'loggers':{
        'level':'DEBUG',
        'handlers':['con_handler', 'file_handler']
    }
}

logging.config.dictConfig(log_config)
logger = logging.getLogger(__name__)
logger.critical('This should always be seen!')

运行时,我收到以下内容:

ValueError was unhandled by user code
Message: Unable to configure logger 'handlers': 'ConvertingList' object has no attribute 'get'

或有时这......

ValueError was unhandled by user code
Message: Unable to configure logger 'level': 'str' object has no attribute 'get'

我怀疑不同的错误可能与字典的有时改变顺序有关吗?

2 个答案:

答案 0 :(得分:0)

将记录器部分更改为

'loggers':{
    '': {
        'level':'DEBUG',
        'handlers':['con_handler', 'file_handler']
        }
}

'' (空字符串)指的是根记​​录器。您可以为不同的组件添加更多记录器:

'loggers':{
    '': {
        'level':'DEBUG',
        'handlers':['con_handler', 'file_handler']
        }
    'bottle': { #I only want error level from bottle :)
        'level':'ERROR',
        'handlers':['con_handler', 'file_handler']
        }
}

答案 1 :(得分:0)

要配置root记录器,请使用root词典的log_config键。

  

root - 这将是根记录器的配置。

来源:Dictionary Schema Details

根据此描述,您的配置应如下所示:

log_config = {

   ...
    'handlers': {
        'con_handler': ...,
        'file_handler': ...
    },
    'loggers': {
        'other_logger': ...
    },
    'root': {
        'level': 'DEBUG',
        'handlers': ['con_handler', 'file_handler']
    }
}