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
_へのログインをオフにするにはどうすればよいですか?
パラミコはそのロガーに名前を付けます。他の言語のロギングモジュール(JDKロギングが頭に浮かぶ)と同じように機能しているようです。
私はそれを見つけました
logging.getLogger("paramiko").setLevel(logging.WARNING)
が役立ちます。
(これは、paramikoをインポートしているモジュール内に配置できます。「logging」モジュールも有効になっていることを確認してください)。
これを行う方法を理解するのに少し時間がかかりました(実際、この答えが頭に浮かんだのは、実際にJavaロギング)を扱い始めるまではありませんでした)
ルートロガーのレベルを_remoteConnect.py
_ではWARN
(WARNING
である必要があります)に設定し、_getdata.py
_ではINFO
に設定しています。アプリケーションのランダムモジュールでルートロガーにレベルを設定することは避けることをお勧めします。代わりに、ロギングを使用するすべてのモジュールでこれを行います。
_import logging
logger = logging.getLogger(__name__)
_
そのモジュールでlogger.debug(...)
などを使用します。次に、アプリケーションの特定の場所(通常は_if __name__ == '__main__':
_から呼び出されるロジック内)で、プログラムで basicConfig
またはセットを使用して、必要なレベルとハンドラーを設定します。ハンドラー、フォーマッターなどを追加するためのAPI呼び出しの数、または宣言型構成の使用(たとえば、fileConfig
またはdictConfig
APIの使用-文書化 ここ )。
Logger2を設定する前に、これを試してください。
logging.basicConfig(level=logging.WARN)