如何禁用特定的日志模块

2024-06-26 14:01:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我在INFO级别设置了logging。但是,我希望从特定模块中删除所有日志,而不考虑级别:

[:pid:8229 2021-06-14 19:32:06,827] - INFO paramiko.transport:_log:L1819: Connected (version 2.0, client OpenSSH_7.6p1)
[:pid:8229 2021-06-14 19:32:06,846] - INFO paramiko.transport:_log:L1819: Authentication (publickey) successful!

我将如何执行以下等效操作

logger = logging.getLogger(self.script_name)
logger.setLevel(logging.INFO)
logger.disableLogger(paramiko) # pseudocode

我想有一种选择是这样做:

logging.getLogger("paramiko").setLevel(logging.ERROR)

Tags: 模块infoclientlogparamikoversionlogginglogger
1条回答
网友
1楼 · 发布于 2024-06-26 14:01:04

logging模块没有模块级记录器的概念,因为每个记录器只是建立在基于名称的层次结构中paramiko.transport将始终以paramiko记录器的子记录器的名称存在,而不是任何模块关联。正因为如此,实际上没有一种通过模块本身禁用日志记录的好方法,但是您可以通过执行类似logging.getLogger('paramiko').setLevel(logging.CRITICAL+1)的操作来有效地禁用该日志记录程序和所有子日志记录程序的日志记录,因为每个日志消息都应该以低于此值的日志记录级别传播,它将导致任何日志消息在到达连接到根记录器的处理程序之前退出

另一个问题是关于禁用所有日志记录,然后在需要时有选择地启用日志记录。要实现类似的效果,最快的方法是排除向根记录器添加任何处理程序,然后以“自下而上”的方式添加处理程序。您希望这样做的原因是,如果您最终将处理程序附加到一个记录器,而该记录器是该处理程序已附加到的记录器的子级,那么您将获得重复的日志消息,这一点绝对值得注意

相关问题 更多 >