关闭Paramiko中的日志记录

30

我正在使用Paramiko提供的ssh客户端创建一个名为remoteSSH的函数调用(文件名为remoteConnect.py):

import paramiko
import logging
logger = paramiko.util.logging.getLogger()
logger.setLevel(logging.WARN)

def remoteSSH(username,userpasswd):
    ....

现在我正在另一个名为 getData() (getdata.py) 的Python模块中调用remoteSSH函数:

from remoteConnect import *
import logging
logger2=logging.getLogger()
logger2.setLevel(logging.INFO)

然而,调用 logger2.info('ccc') 还会在导入 Paramiko 模块的文件(即 remoteConnect.py)中开启所有 INFO 级别的日志记录。

我该如何关闭 remoteConnect.py 中的日志记录,以便 Paramiko 不会输出所有的 INFO 级别消息?


使用“WARNING” - “WARN”已废弃。 - Vinay Sajip
3个回答

77

Paramiko为其日志记录器命名。 它似乎与其他语言中的日志记录模块(例如JDK日志记录)功能相似。

我发现

logging.getLogger("paramiko").setLevel(logging.WARNING) 有帮助。

(您可以将此放在导入paramiko的模块中-只需确保启用了“日志记录”模块)。

我花了一些时间才搞清楚如何做到这一点(实际上,直到我开始处理Java日志记录时,这个答案才浮现在脑海中)。


pysftp 模块使用 paramiko。你的技巧对此很有用。谢谢! - ssoto

3

您在remoteConnect.py中将根记录器的级别设置为WARN(应为WARNING),并在getdata.py中将其设置为INFO。我建议您避免在应用程序的随机模块上设置根记录器的级别,而是在所有想要使用日志记录的模块中执行以下操作:

import logging

logger = logging.getLogger(__name__)

在该模块中使用logger.debug(...)等日志输出语句。然后,在应用程序的特定位置(通常是从if __name__ == '__main__':调用的逻辑)设置您想要的级别和处理程序,可以通过basicConfig或一系列API调用以添加处理程序、格式化程序等来进行编程设置,或者通过声明式配置(例如使用fileConfigdictConfig API - 在此处记录)。


1

在设置logger2之前,请尝试这个:

logging.basicConfig(level=logging.WARN)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接