降低单个记录器的日志记录级别

时间:2020-04-08 20:14:28

标签: python logging python-logging

我使用了一个日志过多的软件包。 它的记录器设置正确,因此我可以使用getLogger来获得单个记录器。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

适配器解决方案的优点是尽早设置电平。适配器的缺点是只能作为记录器的包装,因此您需要将其传递到所有使用记录器的地方。如果这是第三方模块,则适配器解决方案将无法使用。

# 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_)