web-dev-qa-db-ja.com

Paramikoへのログインをオフにする

Paramikoが提供するsshクライアントを使用して、関数呼び出しremoteSSHを作成しています(ファイル名は_remoteConnect.py_):

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

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

今、私は別のPythonモジュールgetData()(_getdata.py_)でremoteSSH関数を呼び出しています:

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

ただし、logger2.info('ccc')を呼び出すと、Paramikoモジュールをインポートしているファイル(つまり、_remoteConnect.py_)のすべてのINFOレベルのログもオンになります。

ParamikoがすべてのINFOレベルのメッセージを吐き出さないように、_remoteConnect.py_へのログインをオフにするにはどうすればよいですか?

19
user963986

パラミコはそのロガーに名前を付けます。他の言語のロギングモジュール(JDKロギングが頭に浮かぶ)と同じように機能しているようです。

私はそれを見つけました

logging.getLogger("paramiko").setLevel(logging.WARNING)が役立ちます。

(これは、paramikoをインポートしているモジュール内に配置できます。「logging」モジュールも有効になっていることを確認してください)。

これを行う方法を理解するのに少し時間がかかりました(実際、この答えが頭に浮かんだのは、実際にJavaロギング)を扱い始めるまではありませんでした)

44
Mark Nunberg

ルートロガーのレベルを_remoteConnect.py_ではWARNWARNINGである必要があります)に設定し、_getdata.py_ではINFOに設定しています。アプリケーションのランダムモジュールでルートロガーにレベルを設定することは避けることをお勧めします。代わりに、ロギングを使用するすべてのモジュールでこれを行います。

_import logging

logger = logging.getLogger(__name__)
_

そのモジュールでlogger.debug(...)などを使用します。次に、アプリケーションの特定の場所(通常は_if __name__ == '__main__':_から呼び出されるロジック内)で、プログラムで basicConfig またはセットを使用して、必要なレベルとハンドラーを設定します。ハンドラー、フォーマッターなどを追加するためのAPI呼び出しの数、または宣言型構成の使用(たとえば、fileConfigまたはdictConfig AP​​Iの使用-文書化 ここ )。

3
Vinay Sajip

Logger2を設定する前に、これを試してください。

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