\

Pythonのloggingモジュールを使用して、コンソールとファイルの両方にログを出力する方法を紹介します。

ロガーのセットアップ

まずは、loggingモジュールをインポートし、ロガーの基本設定を行います。以下のコードでは、StreamHandlerFileHandlerの両方を使用して、コンソールとファイルにログを出力します。

import os
import sys
from datetime import datetime
import logging
from logging import StreamHandler, FileHandler, Formatter
from logging import INFO, DEBUG, NOTSET

# ストリームハンドラの設定
stream_handler = StreamHandler()
stream_handler.setLevel(INFO)
stream_handler.setFormatter(Formatter("%(message)s"))

# 保存先の有無チェック
if not os.path.isdir('./Log'):
    os.makedirs('./Log', exist_ok=True)

# ファイルハンドラの設定
file_handler = FileHandler(f"./Log/log{datetime.now():%Y%m%d%H%M%S}.log")
file_handler.setLevel(DEBUG)
file_handler.setFormatter(Formatter("%(asctime)s@ %(name)s [%(levelname)s] %(funcName)s: %(message)s"))

logging.basicConfig(level=NOTSET, handlers=[stream_handler, file_handler])

ロガーの使用

ロガーを使用する場合は、logging.getLogger(__name__)でロガーオブジェクトを取得して使用します。

logger = logging.getLogger(__name__)
logger.debug("debug")
logger.info("info")
logger.warn("warn")
logger.error("error")
logger.critical("critical")

以上の設定により、ファイルにはすべてのログが、コンソールにはinfoからのログが出力されます。

注意点

logging.basicConfig()で設定する出力レベルに注意が必要です。ログはルートロガー→ハンドラの順に渡されます。そのため、ルートロガーの設定であるlogging.basicConfig()で出力レベルをINFO等にしてしまうと、ルートロガーの時点で出力レベルがDEBUGのログは弾かれてしまいます。

以上、Pythonでコンソールとファイルにログを出力する方法について説明しました。この情報が皆さんの開発に役立つことを願っています。

投稿者 admin

コメントを残す

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