没有basicConfig,日志处理器无法工作

2 投票
1 回答
3610 浏览
提问于 2025-04-17 16:22

我有一个Flask网页应用程序,使用Python的日志配置是在应用启动时通过dictConfig来完成的。我为记录某些日志到数据库设置了一个处理器,绑定在名为'test.module'的日志器上。只有当在应用启动时调用了logging.basicConfig(level=logging.DEBUG),这些日志才会被写入数据库。否则,日志就不会写入数据库。我知道basicConfig只是把一个streamHandler附加到根日志器上。我觉得这应该没关系,因为我不想让根日志器做任何事情。为什么不调用basicConfig就不行呢?

我在下面添加了我如何初始化日志器和我的配置。

class DbHandler(logging.Handler):
    def __init__(self, level=logging.NOTSET):
        logging.Handler.__init__(self, level)

    def emit(self, record):
        record.message = self.format(record)
        log = DbModel()
        log.message = record.message
        log.save()


LOGGING = {
    'version': 1,
    'handlers': {
        'db_log': {
            'level': 'DEBUG',
            'class': 'test.handlers.DbHandler',
        },
    },
    'loggers': {
        'test.important_module': {
            'handlers': [
                'db_log'
            ],
    },
}

# logging.basicConfig(level=logging.DEBUG) # Doesnt work without this
logging.config.dictConfig(LOGGING)

logger = logging.getLogger('test.important_module')
logger.info('Making a test')

1 个回答

8

你没有为'test.important_module'这个记录器本身设置级别(你只是为处理器设置了级别)。

你可以这样做:

logger = logging.getLogger('test.important_module')
logger.setLevel(logging.DEBUG)

或者这样:

'loggers': {
    'test.important_module': {
        'level': 'DEBUG',         # <<< HERE
        'handlers': [
            'db_log'
        ],
},

撰写回答