如何配置Tornado应用程序记录器dict

时间:2018-10-10 16:32:03

标签: python logging tornado

我正在使用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!')

0 个答案:

没有答案