Я использую 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"
У меня естьследовал предложениям здесь , чтобы использовать общее иерархическое определение для tornado
в качестве регистратора, вместо того, чтобы использовать специализированные регистраторы, такие как
loggers = {
'tornado.access': {'handlers': ['h'],
'level': logging.DEBUG}
},
'tornado.application': {'handlers': ['h'],
'level': logging.DEBUG}
}
, но, похоже, что-то все еще не хватает.Должен ли я назвать регистратор как logger.getLogger('tornado')
?Или я пропускаю конфигурацию по умолчанию для tornado.application
где-то еще в моей конфигурации dict?
[ОБНОВЛЕНИЕ]
Я частично решил эту проблему, настраивая 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!')