見出し画像

loggingテンプレ Python

import logging
import logging.handlers
import sys
from pathlib import Path

def setup_logging():
    """
    ログの設定を行う。
    - ローテーションファイル(最大10MB、バックアップ5世代)
    - 標準出力(コンソール)にも出力
    - フォーマット: [YYYY-MM-DD HH:MM:SS] [LEVEL] [MODULE:LINE] メッセージ
    """

    # ログの保存先
    log_dir = Path(__file__).resolve().parent /"logs"
    log_file = "app.log"

    # ログディレクトリを作成(存在しない場合)
    Path(log_dir).mkdir(parents=True, exist_ok=True)
    log_path = Path(log_dir) / log_file

    # フォーマット設定
    log_format = "[%(asctime)s] [%(levelname)s] [%(module)s:%(lineno)d] %(message)s"
    date_format = "%Y-%m-%d %H:%M:%S"

    # ルートロガー取得
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)  # デフォルトはDEBUGレベル

    # ローテーションファイルハンドラー(最大10MB、バックアップ5個)
    file_handler = logging.handlers.RotatingFileHandler(
        log_path, maxBytes=10_000_000, backupCount=5, encoding="utf-8"
    )
    file_handler.setFormatter(logging.Formatter(log_format, datefmt=date_format))
    file_handler.setLevel(logging.DEBUG)  # すべてのログをファイルに出力

    # 標準出力(コンソール)ハンドラー
    console_handler = logging.StreamHandler(sys.stdout)
    console_handler.setFormatter(logging.Formatter(log_format, datefmt=date_format))
    console_handler.setLevel(logging.INFO)  # コンソールはINFO以上のログを出力

    # ロガーにハンドラーを追加
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)

    logging.info("Logging is set up successfully.")

# 初期化(import したらすぐ設定)
setup_logging()

いいなと思ったら応援しよう!