我试图编写基于字典的日志记录配置,并且在运行程序时遇到的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'
我怀疑不同的错误可能与字典的有时改变顺序有关吗?
答案 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 - 这将是根记录器的配置。
根据此描述,您的配置应如下所示:
log_config = {
...
'handlers': {
'con_handler': ...,
'file_handler': ...
},
'loggers': {
'other_logger': ...
},
'root': {
'level': 'DEBUG',
'handlers': ['con_handler', 'file_handler']
}
}