【Python】logging機能を用いてログ出力する方法

当ページには広告が含まれています。

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • Pythonを用いてログを出力する方法が知りたい
  • ログレベル・重要度に応じて柔軟にログ出力したい
目次

ログとは

ログとは、アプリケーション利用状況やプログラムレベルでの実行記録を残すこと、またはその記録を指します。

ログの記録として「出力日時」「ログレベル」「ログ詳細メッセージ」の3つが主に記録されることが一般的です。何がどの順番で起こったかを理解するために、ログを取ることは非常に有効な手段と言えます。

【Python】loggingライブラリを用いたログ出力

Pythonのloggingライブラリを活用すると、容易にログを取ることが可能です。

ログ出力に際して、プログラム冒頭に記載するひな型コードおよびシンプルなログ出力コードを示します。実行してみましょう。

import logging

# ログ設定
logging.basicConfig(filename = "Log.txt",                                        # ログファイル名 
                    filemode = "w",                                              # ファイル書込
                    level    = logging.DEBUG,                                    # ログレベル
                    format   = " %(asctime)s - %(levelname)s - %(message)s "     # ログ出力フォーマット
                   )


# ログ出力
logging.debug("プログラム開始")

# 出力イメージ
#  2022-12-07 09:03:46,872 - DEBUG - プログラム開始 

テキストファイルにログを出力する場合

ログの出力先として「画面」または「テキストファイル」の2つが選択可能です。テキストファイル上にログ出力したい場合、logging.basicConfig()メソッドに対して、filenameおよびfilemodeの引数を指定します。

import logging

# ログ設定
logging.basicConfig(filename = "Log.txt",                                        # ログファイル名 
                    filemode = "w",                                              # ファイル書込
                    level    = logging.DEBUG,                                    # ログレベル
                    format   = " %(asctime)s - %(levelname)s - %(message)s "     # ログ出力フォーマット
                   )

テキストファイルではなく、画面上にログを出力する場合、filenameおよびfilemodeの引数を除外すれば良いです。

【Python】ログレベルに応じた様々なログを出力する

loggingライブラリを用いると、ログメッセージの重要度に応じたログを出力が可能です。

スクロールできます
ログレベル記述方法重要度概要
DEBUGlogging.debug()プログラム実行における詳細記録用
INFOlogging.info()各種イベントやプログラム要所での動作確認用
WARNINGlogging.warning()警告メッセージ記録用
ERRORlogging.error()エラー発現時の記録用
CRITICALlogging.critical()最高プログラムの実行が中断するような
致命的なエラー発現時の記録用

ログレベルに応じたログ出力

上記のログレベルに応じたログ出力方法について言及します。以下のプログラムを実行してみましょう。

コード

import logging

# ログ設定
logging.basicConfig(filename = "Log.txt",                                        # ログファイル名 
                    filemode = "w",                                              # ファイル書込
                    level    = logging.DEBUG,                                    # ログレベル
                    format   = " %(asctime)s - %(levelname)s - %(message)s "     # ログ出力フォーマット
                   )


# =================================================
# 以下ログ出力
# =================================================

# logging.debug()   : 重要度(低) : 詳細記録用
logging.debug("プログラム実行開始")

# logging.info()    : 重要度(中) : イベント記録用 
logging.info("プログラムXXXが実行されました。")

# logging.warning() : 重要度(中) : 将来発現しうる潜在的な問題を指定
logging.warning("プログラムXXXにてエラー発現の可能性があります。")

# logging.error()   : 重要度(高) : エラー記録
logging.error("プログラムXXXにてエラーが発生しました。")

# logging.critical() : 重要度(最高) : プログラム実行を中止する致命的なエラーを示唆
logging.critical("プログラムの実行が中断されました。")

出力イメージ

# 2022-12-07 09:31:18,616 - DEBUG - プログラム実行開始 
# 2022-12-07 09:31:18,616 - INFO - プログラムXXXが実行されました。 
# 2022-12-07 09:31:18,616 - WARNING - プログラムXXXにてエラー発現の可能性があります。 
# 2022-12-07 09:31:18,617 - ERROR - プログラムXXXにてエラーが発生しました。 
# 2022-12-07 09:31:18,617 - CRITICAL - プログラムの実行が中断されました。 

【Python】ログ出力を無効化

プログラムのデバッグ完了後は、画面をログメッセージを出力したくないという要望があるかもしれません。

logging.disable()関数を用いるとログ出力の無効化も可能です。

全てのログを無効化したい場合、logging.disable(logging.CRITICAL)を追記します。

import logging

# ログ設定
logging.basicConfig(filename = "Log.txt",                                        # ログファイル名 
                    filemode = "w",                                              # ファイル書込
                    level    = logging.DEBUG,                                    # ログレベル
                    format   = " %(asctime)s - %(levelname)s - %(message)s "     # ログ出力フォーマット
                   )

# ログ出力
logging.debug("このログは表示されます")

# ログ出力を無効にする
logging.disable(logging.CRITICAL)

# 以降のログは全て非表示になる
logging.debug("このログは表示されません")
logging.debug("このログは表示されません")
logging.debug("このログは表示されません")

【参考】Pythonを活用した様々なお役立ち情報

当サイトではPythonを活用した様々なお役立ち情報を配信しています。

Pythonでできること・仕事に応用

Pythonで実現できることを知りたい」「Pythonスキルを仕事で活かしたい」方はこちら!

Python✖️AI・機械学習

Python活用の最大メリットの1つであるAI・機械学習について詳しく知りたい方はこちら!

Python✖️投資自動化(仮想通貨)

Pythonはフィンテックとの相性が良く、その中でも仮想通貨自動売買タスクは近年注目度の高い領域です。フィンテック・投資に興味がある方はこちら!

最後に

この記事が気に入ったら
フォローしてね!

目次