はじめに
今までは主にNodeで開発しており、各アプリの既存ログ機能を利用していましたが、Pythonで開発するにあたり自分で実装することになりました。
調べた結果、標準モジュールのloggingが便利だと感じたので、記事に残しておきたいと思います。
仕様
仕様については公式ドキュメントをご覧ください。リンク先はPython3.13用です。
実装例
loggingはターミナルやファイルに出力できます。
まずはターミナルに出力してみましょう。
import logging
# ログの基本設定
logging.basicConfig(
level=logging.INFO, # ログレベルをINFOに設定
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' # ログフォーマット
)
# ロガーの作成
logger = logging.getLogger(__name__)
# ログメッセージの出力
logger.info("これは情報メッセージです")
logger.warning("これは警告メッセージです")
logger.error("これはエラーメッセージです")
今度はログファイルに出力します。
import logging
import os
# ログファイルの設定
LOG_DIR = "."
LOG_FILE = os.path.join(LOG_DIR, "app.log")
# ログの基本設定
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[logging.FileHandler(LOG_FILE, encoding='utf-8')] # ファイルハンドラを追加
)
logger = logging.getLogger(__name__)
# ログメッセージの出力
logger.info("これは情報メッセージです")
logger.warning("これは警告メッセージです")
logger.error("これはエラーメッセージです")
logger.critical("これは重大なエラーメッセージです")
こちらもVSCodeで実行します。
ログファイルを開くと、きちんと記録されていました!
フォーマットはカスタムできるので、見やすいように調整すると良さそうです。
(今回のコードは最も標準的なもののようです。)
終わりに
初めて実装したloggingは現在時刻をdatetimeモジュールで取得していましたが、記事執筆をする中で時刻取得機能があることを知りました∑(゚Д゚)
(生成AIの felo に教えてもらいました)
つい生成AIに頼ってしまいますが、自分でアウトプットするためにもインプット大事!と感じました。
開発段階ではprint()を使うことも多いですが、ファイル出力ができ、機能やフォーマットも共通化できる点で、運用時のメリットがありそうだと感じました。
最後までご覧いただき、ありがとうございました!