0

これは、 Pythonロギングモジュールから非ブロッキング/リアルタイムの動作を取得する方法についての回答に対するフォローアップの質問です。(PyQt QTextBrowserへの出力)X.Jacobsによって提供されます。

Pythonロギングモジュールでは、カスタムハンドラーを追加する通常の方法は、から継承するハンドラークラスを定義することですlogging.Handler(これを呼び出しますCustomLogHandler)。プロセスにアタッチするにloggingは、通常、次のようにします。

import logging

class CustomLogHandler(logging.Handler):
    ... (some code here)...

logger = logging.getLogger()
logger.addHandler(CustomLogHandler)

ここで、はインスタンスaddHandlerのメソッドです。logger

質問:(つまり、上記を実行したくない)を取得したくなかったとします。を自分自身に取り付けることは可能ですか?loggerCustomLogHandlerlogging

Pythonロギングモジュールから非ブロッキング/リアルタイム動作を取得する方法のコメントを参照してください。(PyQt QTextBrowserへの出力)コンテキスト用。

loggerインスタンスを参照せずにカスタムハンドラーを使用できることが前提です。

4

1 に答える 1

5

logging.getLogger()ルートロガーインスタンスを返し、そのオブジェクトからそれ以上「上」にあるものはなく、ルート超えてハンドラーをアタッチするものは他にありません。

次のようなモジュール レベルの関数logging.error()は、ルート ロガーを使用します。ドキュメントからの引用:

logging.error(msg[, *args[, **kwargs]])
ルート ロガーにレベル ERROR のメッセージを記録します。引数は、debug() の場合と同様に解釈されます。

言い換えれば、logging.error()単に callのような関数getLogger().error()

あなたCustomLogHandlerをルートロガーにアタッチすることは、それをモジュールに追加する正しい方法です。

于 2013-01-16T21:12:15.493 に答える