Python ロギングの伝播

Mehvish Ashiq 2023年6月21日
Python ロギングの伝播

このチュートリアルでは、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
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

関連記事 - Python Logging