Python ロギングの伝播
Mehvish Ashiq
2023年6月21日
このチュートリアルでは、LevelFilter
を使用して、特定のレベル以上の特定のロガー名 (たとえば、INFO
以上) のメッセージを特定のログ ハンドラーに記録する方法を示します。
Python ロギングの伝播
logging
モジュール、その重要性、さまざまなログ レベル、および logging
モジュールのローカルおよびグローバルな使用方法について説明する 記事 を既に作成しています。 ここでは、現在のロガー レベルより下のレベルの特定のメッセージを伝播する方法を学習します。
どういう意味ですか? これは、特定のロガー名、特定のレベル以上 (たとえば INFO
以上) のメッセージを特定のログ ハンドラー (ストリーム ハンドラーまたはファイル ハンドラーと仮定します) に記録することを意味します。
コード例:
import logging
class LevelFilter(logging.Filter):
def __init__(self, level):
self.level = level
def filter(self, record):
return record.levelno >= self.level
def perform_logging(turn):
logger = logging.getLogger("extra")
logger.info("some information turn %d" % turn)
logger.debug("this is the debug fudge turn %d" % turn)
rootLogger = logging.getLogger()
handler = logging.StreamHandler()
rootFormatter = logging.Formatter("root - %(levelname)s: %(msg)s")
handler.setFormatter(rootFormatter)
rootLogger.addHandler(handler)
rootLogger.setLevel(logging.DEBUG)
perform_logging(1)
extraLogger = logging.getLogger("extra")
extraHandler = logging.StreamHandler()
extraFormatter = logging.Formatter("extra - %(levelname)s: %(msg)s")
extraHandler.setFormatter(extraFormatter)
extraLogger.addHandler(extraHandler)
extraHandler.addFilter(LevelFilter(logging.INFO))
extraLogger.setLevel(logging.DEBUG)
perform_logging(2)
出力:
root - INFO: some information turn 1
root - DEBUG: this is the debug fudge turn 1
extra - INFO: some information turn 2
root - INFO: some information turn 2
root - DEBUG: this is the debug fudge turn 2
この例では、root
ロガーと名前付きロガー (ここでは extra
) の 2つのロガーを作成します。
root
ロガーの logging.StreamHandler
をアタッチし、ログ レベルを logging.DEBUG
に設定します。 その後、ハンドラを名前付きロガーにアタッチし、そのロギング レベルを logging.INFO
に設定します。
ここで重要なのは、現在のレベルより下の特定のレベルのメッセージをどのように伝播するかです。 そのために、LevelFilter
を使用して、特定のレベルのみを許可するフィルターをすべてのハンドラーに追加します。
著者: Mehvish Ashiq