Как настроить диктофоны приложения Tornado dict - PullRequest
0 голосов
/ 10 октября 2018

Я использую 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!')
...