Отключение регистрации в 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?
Ответы
Ответ 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)