TLDR
如果模块使用
log.error("something happened")
我们希望看到这些日志,但作为警告,这样我们的净效果将与该模块使用相同
log.warning("something happened")
更多详细信息
我们使用aiokafka模块,当与confluent.cloud的连接出现问题时,该模块会记录错误。然而,这些都是暂时的问题,并且在一段时间后重新建立连接,因此我们更希望这些日志是警告,而不是错误。但我们不想丢失这些日志。
有没有一种方法可以修改这些日志记录;在飞行中";,更改他们的日志级别?我知道我可以
logger = logging.getLogger("aiokafka")
logger.setLevel(logging.CRITICAL)
但是所有的日志都会丢失。
您可以为记录器附加一个过滤函数,以降低级别。以下是一个可以用来构建的工作示例:
import logging
def downgrade_filter(record):
if record.levelno == logging.ERROR:
record.levelno = logging.WARNING
record.levelname = logging.getLevelName(logging.WARNING)
return True
if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG, format='%(levelname)-8s|%(name)-8s|%(message)s')
logger = logging.getLogger('aiokafka')
logger.setLevel(logging.WARNING)
logger.addFilter(downgrade_filter)
logger.debug('This should not appear')
logger.info('This should not appear')
logger.warning('This should appear as a warning')
logger.error('This should appear as a warning, though logged as an error')
logger.critical('This should appear as a critical error')
运行时,应打印
WARNING |aiokafka|This should appear as a warning
WARNING |aiokafka|This should appear as a warning, though logged as an error
CRITICAL|aiokafka|This should appear as a critical error
(这是Python 3.x的最新版本)