\

Pythonのロギングシステムは非常に強力で、多くの設定オプションを提供しています。その一つがロガーの伝播です。ロガーの伝播は、あるロガーから別のロガーへとログメッセージが伝わる仕組みを指します。

Pythonでは、ロガーの伝播を制御するためにpropagate属性を使用します。この属性はデフォルトでTrueに設定されており、これはログメッセージが親ロガーに伝播することを意味します。

しかし、場合によっては、特定のロガーからのログメッセージが親ロガーに伝播するのを防ぎたいかもしれません。その場合、propagate属性をFalseに設定します。

以下に、ロガーの伝播を制御するためのPythonコードの例を示します。

import logging

if __name__ == "__main__":
    logger = logging.getLogger("script_logger")
    logger.debug("debug msg")

logging.json = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        "simple": {
            "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
        }
    },
    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
            "level": "DEBUG",
            "formatter": "simple",
            "stream": "ext://sys.stdout"
        },
        "info_file_handler": {
            "class": "logging.handlers.RotatingFileHandler",
            "level": "INFO",
            "formatter": "simple",
            "filename": "info.log",
            "maxBytes": 10485760,
            "backupCount": 20,
            "encoding": "utf8"
        },
        "error_file_handler": {
            "class": "logging.handlers.RotatingFileHandler",
            "level": "ERROR",
            "formatter": "simple",
            "filename": "errors.log",
            "maxBytes": 10485760,
            "backupCount": 20,
            "encoding": "utf8"
        }
    },
    "loggers": {
        "script_logger": {
            "level": "DEBUG",
            "handlers": ["console"],
            "propagate": "no"
        }
    },
    "root": {
        "level": "DEBUG",
        "handlers": ["console", "info_file_handler", "error_file_handler"]
    }
}

このコードでは、script_loggerという名前のロガーが作成され、そのpropagate属性がnoに設定されています。これにより、script_loggerからのログメッセージは親ロガーに伝播されません。

Pythonのロギングシステムは非常に柔軟性があり、あらゆる種類のログメッセージの生成と管理を可能にします。ロガーの伝播はその一部であり、適切に使用することで、ログメッセージの流れをより細かく制御することができます。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です