单个记录器的较低记录级别

Lower logging level for single logger

我使用的包记录太多。 它已正确设置记录器,因此我可以使用 getLogger.

获取单个记录器

是否可以降低特定记录器生成的所有消息的记录级别?

我知道有 setLevel 功能,可以禁用所有低于特定级别的消息,但我仍然希望记录消息,只是在较低级别,例如INFO 级别的消息应该记录在 DEBUG 中。

这取决于您想要发生什么。您可以使用过滤器或适配器来修改日志级别。

过滤器更简单,但只适用于降低日志级别。

适配器解决方案的优点是可以尽早设置级别。适配器的缺点是它只是记录器的包装器,因此您需要将它传递到所有使用记录器的地方。如果那是第三方模块,适配器解决方案将无法实现。

# Using filters
import logging

def changeLevel(record):
    if record.levelno == logging.INFO:
        record.levelno = logging.DEBUG
        record.levelname = "DEBUG"
    return record

logger = logging.getLogger('name')
logger.addFilter(changeLevel)
# Using an adapter
import logging

class ChangeLevel(logging.LoggerAdapter):
    def log(self, level, msg, *args, **kwargs):
        if level == logging.INFO:
            level = logging.DEBUG
        super().log(level, msg, args, kwargs)

logger_ = logging.getLogger('name', {})
logger = ChangeLevel(logger_)