Отключение регистрации в Paramiko - программирование
Подтвердить что ты не робот

Отключение регистрации в Paramiko

Я использую клиент ssh, предоставленный Paramiko, для создания вызова функции "remoteSSH" (имя файла - remoteConnect.py):

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

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

Теперь я вызываю функцию remoteSSH в другом Python-модуле с именем getData() (getdata.py):

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

Однако вызов logger2.info('ccc') также включает все записи уровня INFO в файле, который импортирует модуль Paramiko (т.е. remoteConnect.py)

Как отключить ведение журнала в remoteConnect.py, чтобы Paramiko не выдавал все сообщения уровня INFO?

4b9b3361

Ответ 1

Парамико называет свои логггеры. Кажется, он функционирует как модули протоколирования на других языках (например, при записи в журнал JDK).

Я обнаружил, что

logging.getLogger("paramiko").setLevel(logging.WARNING) помогает.

(Вы можете поместить это внутри модуля, импортирующего paramiko, - просто убедитесь, что модуль "logging" также включен).

Мне потребовалось некоторое время, чтобы понять, как это сделать (на самом деле, только когда я начал заниматься регистрацией Java, этот ответ пришел на ум)

Ответ 2

Вы устанавливаете уровень корневого регистратора на WARN (должен быть WARNING) в remoteConnect.py и на INFO в getdata.py. Я бы посоветовал вам не устанавливать уровни корневого регистратора в случайных модулях в вашем приложении: вместо этого сделайте это во всех своих модулях, где вы хотите использовать ведение журнала:

import logging

logger = logging.getLogger(__name__)

и используйте logger.debug(...) и т.д. в этом модуле. Затем в одном конкретном месте вашего приложения (обычно в вашей логике, называемой if __name__ == '__main__':, задайте уровни и обработчики, которые вы хотите, либо программно через basicConfig или набор вызовов API для добавления обработчиков, форматировщиков и т.д. или с помощью декларативной конфигурации (например, с использованием fileConfig или dictConfig API-документов здесь).

Ответ 3

Попробуйте это до настройки logger2:

logging.basicConfig(level=logging.WARN)