我使用了一个日志过多的软件包。
它的记录器设置正确,因此我可以使用getLogger
来获得单个记录器。
是否可以降低特定记录器产生的所有消息的记录级别?
我知道有setLevel
功能,该功能可禁用所有低于特定级别的消息,但是我仍然希望消息被记录下来,只是处于较低级别,例如INFO级消息应该记录在DEBUG。
答案 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_)