我正在使用Tornado,并且在配置记录器时遇到一些问题。
import logging
from logging.config import dictConfig
#...
logging_config = dict(
version = 1,
formatters = {
'f': {'format':
'%(asctime)s %(name)-12s %(levelname)-8s %(message)s'}
},
handlers = {
'h': {'class': 'logging.StreamHandler',
'formatter': 'f',
'level': logging.DEBUG}
},
loggers = {
"tornado" : {'handlers': ['h'],
'level': logging.DEBUG}
}
)
dictConfig(logging_config)
然后我检索了一个通用记录器并像这样使用它
logger = logging.getLogger()
logger.info('analysisFromId %s' % id)
然后我得到了众所周知的错误
"No handlers could be found for logger "tornado.application"
我遵循了here的建议,将tornado
的通用层次结构定义用作记录器,而不是像这样专门的记录器
loggers = {
'tornado.access': {'handlers': ['h'],
'level': logging.DEBUG}
},
'tornado.application': {'handlers': ['h'],
'level': logging.DEBUG}
}
但似乎仍然缺少一些东西。
我可以像logger.getLogger('tornado')
这样称呼记录器吗?还是我在记录字典配置的其他地方缺少tornado.application
的默认配置?
[更新]
我已经部分解决了此问题,以这种方式配置默认的python日志记录:
def configure_logger(name, log_path):
dictConfig({
'version': 1,
'formatters': {
'default': {'format': '%(asctime)s - %(levelname)s - %(message)s', 'datefmt': '%Y-%m-%d %H:%M:%S'}
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'default',
'stream': 'ext://sys.stdout'
},
'file': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'default',
'filename': log_path,
'maxBytes': 1024,
'backupCount': 3
}
},
'loggers': {
'default': {
'level': 'DEBUG',
'handlers': ['console', 'file']
}
},
'disable_existing_loggers': False
})
return logging.getLogger(name)
称为
log_file_filename = "/var/log/apache2/tornado_" + time.strftime("%Y%m%d-%H%M%S") + ".log"
default_logger = configure_logger('default', log_file_filename)
default_logger.debug('hello world!')