Code

Pythonでログ管理を行うための自作Loggerを紹介

スポンサーラベル
Code

Pythonで私が使っている自作のLoggerプログラムを紹介します。

まずはフォルダ構成ですが、以下のファイル(logger.py)をlibsディレクトリ内に保存する構成にしています。

import logging

class Logger:
    @staticmethod
    def get_logger(name: str = "default_logger", log_file: str = "test.log", stream: bool = True):
        logger = logging.getLogger(name)
        if not logger.hasHandlers():  # Avoid adding multiple handlers if already configured
            handler = logging.FileHandler(log_file, encoding="utf-8")
            formatter = logging.Formatter(
                "%(asctime)s - %(levelname)s - %(name)s - %(message)s"
            )
            handler.setFormatter(formatter)
            logger.addHandler(handler)
            logger.setLevel(logging.INFO)

            # Stream (Console) Handler
            if stream :
                console_handler = logging.StreamHandler()
                console_formatter = logging.Formatter(
                    "%(asctime)s - %(levelname)s - %(name)s - %(message)s"
                )
                console_handler.setFormatter(console_formatter)
                logger.addHandler(console_handler)

        return logger

呼び出すPythonスクリプトの本体側の処理です。以下のようにlibsにあるLoggerを呼び出しています。

@staticmethodを使っているのでインスタンス生成せずにそのまま利用することができます。
※事前にlogsフォルダを作成しておく必要があります。
実行すると自動的にlogs/<スクリプト名>.logという名前でログが生成されます。

import os
from libs.logger import Logger

## Logger
dir_path = os.path.dirname(__file__)
log = Logger.get_logger("my_logger",(dir_path + "/logs/" + os.path.basename(__file__) + ".log"), True)


def main():
    try:
        log.info("Start Script !!!!!")
        <ここに処理>
        log.info("End Script !!!!!")

    except KeyboardInterrupt:
        log.info(f"Exiting program.")
    except Exception as e:
        tb = traceback.format_exc()
        log.info(f"Unexpected error at top level: {e}\nTraceback:\n{tb}")

if __name__ == "__main__":
    main()

ログを有効に使うことで、実行履歴の管理だけでなく、デバックにも便利です。ぜひ使ってみてください。

Python学習におすすめの書籍

今回は以上となります。

コメント

タイトルとURLをコピーしました