在下面的示例中,我试图将处理程序RotatingFileHandler(LOGGING_BASE_DIR + 'application.log', maxBytes=5e6, backupCount=10)添加到记录器device中,但得到了错误ValueError: Unable to configure logger 'device': Unable to add handler <logging.handlers.RotatingFileHandler object at 0x1031beb10>: <logging.handlers.RotatingFileHandler object at 0x1031beb10>。
我意识到,我将一个处理程序定义为一个字符串,另一个定义为一个处理程序对象,因此这可能是它不能工作的原因。但是,是否有某种方法可以在配置中以行方式定义处理程序,或者是否需要将处理程序本身与console处理程序一起添加到配置中?
LOGGING_CONFIG = {
'version': 1,
'disable_existing_loggers': True,
'incremental': False,
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'debug',
'stream': sys.stdout
},
},
'loggers': {
'device': {
'handlers': [
'console',
RotatingFileHandler(LOGGING_BASE_DIR + 'application.log', maxBytes=5e6, backupCount=10),
],
'level': 'DEBUG',
'propagate': True
},
}
}发布于 2015-01-18 02:45:50
您应该将RotatingFileHandler添加到id console标记的handlers部分的旁边,如日志字典模式详细信息中所述。
但是,如果这个json字典是从一个文件中加载的,那么您将无法使用LOGGING_BASE_DIR + 'application.log'作为文件名,因为没有定义LOGGING_BASE_DIR (并且在这个上下文中不是一个有效的字符串)。在这种情况下,您应该用一个完整和有效的路径名来替换它。如果您正在从python脚本(可能调用logging.config.dictConfig()的相同脚本)中生成此字典,那么您可以使用它,前提是您之前已经定义了LOGGING_BASE_DIR,并且它指向了一个有效的路径。不过,我会使用os.path.join,而不是+。
那么,你的字典可能是这样的:
MYDIR = '/tmp/log'
LOGGING_CONFIG = {
'version': 1,
'disable_existing_loggers': True,
'incremental': False,
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'stream': 'ext://sys.stdout'
},
'rotatingfile': {
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(MYDIR, 'application.log'),
'maxBytes': 5e6,
'backupCount': 10
}
},
'loggers': {
'device': {
'handlers': [
'console',
'rotatingfile'
],
'level': 'DEBUG',
'propagate': True
},
}
}https://stackoverflow.com/questions/27973150
复制相似问题