3

私の当初の意図は、私が呼び出していたデータをログに記録することでした

logger.debug(' testing ') 

自分のコード内で呼び出します。これは機能します。

ただし、.py ファイルの先頭にあるロガー オブジェクトを初期化した後、使用しているライブラリの 1 つのロガーもそのロガーを呼び出しているようです (http lib を要求します)。

08/24 10:01:34 - requests.packages.urllib3.connectionpool - INFO - connectionpool.py - 202 - Starting new HTTP connection (1): www.technicianonline.com
08/24 10:01:34 - requests.packages.urllib3.connectionpool - DEBUG - connectionpool.py - 296 - "GET / HTTP/1.1" 200 None
08/24 10:01:34 - requests.packages.urllib3.connectionpool - DEBUG - connectionpool.py - 296 - "GET / HTTP/1.1" 200 None
08/24 10:01:34 - root - DEBUG - finder.py - 47 - testing

ルート - DEBUG ログのみが必要です。それは私自身のものだからです。ただし、これらのリクエスト ログもすべて含まれています。私が推測しなければならなかったのは、Pythonが動的言語であり、変数が表示されているためですが、リクエストはおそらく独自のロガーを初期化するため、それほど意味がありません。

何か案は?ありがとう。

4

3 に答える 3

3

受け入れられた答えは、実際には実用的な解決策ではありません。使用するすべてのライブラリによってインスタンス化されたすべてのロガーを明示的に子守する必要はありません。標準フィルターはすべての認識されないメッセージを抑制するため、を使用するlogging.Filterことも実際には最良のアイデアではありませんが、ライブラリからのより高いレベルのメッセージが必要になる可能性があります。

正解は、Greg のコメントの両方の提案に従うことです。ルートロガーをより高く設定し、管理できる独自のメッセージに別のロガーを使用します。

In [1]: import logging
In [2]: logging.basicConfig(level=logging.WARNING)
In [3]: l = logging.getLogger('myapp')
In [4]: l.setLevel(logging.DEBUG)
In [5]: l.debug('hello')
DEBUG:test:hello
In [6]: logging.getLogger('library').debug("you won't see me")
In [7]: logging.getLogger('library').critical("you need to see me")
CRITICAL:library:you need to see me
于 2015-07-14T17:19:34.697 に答える
3

あなたはすることができます

logging.getLogger('requests').setLevel(logging.WARNING)

requestsこれにより、すべての出力がto以上に制限されWARNINGます (もちろん、必要に応じてレベルを高く設定することもできます)。

使用する可能性のある他のライブラリのロガーの冗長性を制御する場合も、同じアプローチが適用されます。

于 2013-08-24T17:28:51.207 に答える
1

logging.Filter子ロガーからのメッセージを無視するを追加できます。

于 2013-08-24T17:11:02.193 に答える