Отключение входа в Paramiko - PullRequest
18 голосов
/ 16 ноября 2011

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

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

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

Теперь я вызываю функцию remoteSSH в другом модуле Pythonnamed 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?

Ответы [ 3 ]

43 голосов
/ 18 октября 2012

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

Я нашел это

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

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

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

3 голосов
/ 29 ноября 2011

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

import logging

logger = logging.getLogger(__name__)

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

1 голос
/ 28 ноября 2011

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

logging.basicConfig(level=logging.WARN)
...