首页 > 解决方案 > 日志记录无法配置一些导入的模块(包括导入)(python 日志记录)

问题描述

我想打印来自所有导入模块的所有日志消息。某些导入的模块没有记录。

请注意,我关心的库中的所有文件在 logger = logging.getLogger(__name__)顶部都有调用。

对不起,如果这是一个简单的问题。我浏览了很多帖子都没有成功。

我观察到某些模块的记录器没有通过调用 basicConfig 来更新

import logging
import local_util   # a local util file
from transformers import T5ForConditionalGeneration

for n in logging.root.manager.loggerDict:
    print(logging.getLogger(n))

logging.basicConfig(level=logging.DEBUG)
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
formatter = logging.Formatter("[%(asctime)s] %(levelname)s::%(module)s::%(funcName)s() %(message)s")
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)

for n in logging.root.manager.loggerDict:
    print(logging.getLogger(n))

在第一次调用print(logging.getLogger(n))几乎所有记录器时都设置了警告级别。

在第二次调用中,大多数记录器都设置为 DEBUG(包括用于 local_util 的记录器),但变压器库除外,它们都保持在 WARNING 级别。

如果我手动循环浏览所有记录器并重置它们的级别,我可以获得要打印的转换器消息。即使我force=True在调用 basicConfig 时使用,transformers 库的记录器也不会更新。

标签: pythonlogging

解决方案


basicConfig表示影响根记录器。如果其他子记录器未设置其级别(默认为NOTSET),则它们使用根记录器的级别。

因此,如果transformers自己设置了WARNING级别,则不会使用DEBUGroot 级别。

您可以直接设置其级别如下:

transformers_logger = logging.getLogger('transformers')
transformers_logger.setLevel(logging.DEBUG) 

推荐阅读