Desactivando el inicio de sesión en Paramiko

Estoy usando el cliente ssh proporcionado por Paramiko para crear una función llamada ‘remoteSSH’ (el nombre del archivo es remoteConnect.py):

import paramiko import logging logger = paramiko.util.logging.getLogger() logger.setLevel(logging.WARN) def remoteSSH(username,userpasswd): .... 

Ahora estoy llamando a la función remoteSSH en otro módulo de Python llamado getData () (getdata.py):

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

Sin embargo, una llamada a logger2.info('ccc') también activa todo el registro de nivel INFO en el archivo que está importando el módulo Paramiko (es decir, remoteConnect.py )

¿Cómo desactivo el registro en remoteConnect.py para que Paramiko no escupa todos los mensajes del nivel INFO?

Paramiko nombra sus registradores. Parece funcionar como lo hacen los módulos de registro en otros idiomas (el registro de JDK viene a la mente).

He encontrado que

logging.getLogger("paramiko").setLevel(logging.WARNING) ayuda.

(Puede colocar esto dentro del módulo que está importando paramiko, solo asegúrese de que el módulo de ‘registro’ también esté habilitado).

Me tomó un tiempo darme cuenta de cómo hacer esto (de hecho, no fue hasta que empecé a lidiar con el registro de Java que esta respuesta me vino a la mente)

Está configurando el nivel del registrador raíz en WARN (debería ser WARNING ) en remoteConnect.py , y en INFO en getdata.py . Le aconsejaría que evite establecer niveles en el registrador raíz en módulos aleatorios en su aplicación: en su lugar, haga esto en todos los módulos en los que desee utilizar el registro:

 import logging logger = logging.getLogger(__name__) 

y use logger.debug(...) , etc. en ese módulo. Luego, en un lugar específico en su aplicación (normalmente en su lógica llamada desde if __name__ == '__main__': establezca los niveles y manejadores que desee, ya sea mediante progtwigción a través de basicConfig o un conjunto de llamadas API para agregar manejadores, formateadores, etc. ., o mediante el uso de una configuración declarativa (por ejemplo, utilizando las API fileConfig o dictConfig – documentadas aquí ).

Intenta esto antes de configurar logger2:

 logging.basicConfig(level=logging.WARN)