【Python】Loggingを使ったログ出力方法について分かりやすく解説

スポンサーリンク
【Python】Loggingを使ったログ出力方法について分かりやすく解説Python
パッケージこの記事を読んで分かること
  • Loggingを使ったログの出力方法

 

 

今回は、Pythonでログ出力をする一般的な方法であるLoggingパッケージの使い方を解説します。

公式サイトのチュートリアルに則った内容となります。

 

Loggingの使い方

早速ですが、Pythonでコンソールにログ出力する簡単なコード例が以下となります。

import logging

# 1. ロガーの作成
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)  # 出力レベルを設定

# 2. ハンドラーを作成する
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)  # 出力レベルを設定

# 3. フォーマッタを作成する
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 4. ハンドラーにフォーマッターを設定する
ch.setFormatter(formatter)

# 5. ロガーにハンドラーを追加する
logger.addHandler(ch)

# ロガーのテスト
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')
実行結果(クリックして表示)
2022-07-31 13:48:30,048 - __main__ - INFO - info message
2022-07-31 13:48:30,050 - __main__ - WARNING - warn message
2022-07-31 13:48:30,051 - __main__ - ERROR - error message
2022-07-31 13:48:30,053 - __main__ - CRITICAL - critical message

 

このコードを実行するとINFO以上のレベルのメッセージが表示されることが確認できます。

 

Loggingパッケージでログ出力するためには、以下の5つの工程が必要になります。

Loggingパッケージのログ出力方法
    • ステップ1
      ロガーの作成
    • ステップ2
      ハンドラーの作成
    • ステップ3
      フォーマッタの作成
    • ステップ4
      ハンドラーにフォーマッターを設定
    • ステップ5
      ロガーにハンドラーを追加

 

ステップ1 : ロガーの作成

ログ出力をするためにまず、ロガーオブジェクトを作成します。

ロガーオブジェクトでは、ログメッセージの記録や、ログレベルに応じたフィルタリングなどを行います。

 

ステップ2 : ハンドラーの作成

ハンドラーでは、ログの出力先を振り分ける役割を担っています。

コンソールへの出力、ファイルへの出力、通信で他のサーバへ送信といったような様々な処理の実行が可能です。

 

ここでは利用しやすい便利なハンドラーの一覧を掲載しておきます。

詳細については公式サイトを確認してください。

便利なハンドラー
ハンドラー概要
StreamHandler 標準出力にメッセージを送ります。
FileHandlerファイルにメッセージを出力します。
RotatingFileHandlerファイルにメッセージを出力します。
(ログファイル数でログローテーションを実施)
TimedRotatingFileHandlerファイルにメッセージを出力します。
(時間単位でログローテーションを実施)
SocketHandlerTCP/IP ソケットにメッセージを送ります。
DatagramHandlerUDP ソケットにメッセージを送ります。
SMTPHandlerメッセージを指示された email アドレスに送ります。
SysLogHandlerメッセージをリモートマシンのUnix syslog daemon に送ります。
NTEventLogHandlerメッセージを Windows NT/2000/XP イベントログに送ります。
MemoryHandlerメッセージをメモリ中のバッファに送ります。
HTTPHandlerメッセージを GET または POSTを使ってHTTP サーバに送ります。
WatchedFileHandler出力先のファイルを監視し、ファイルの変更が検知された場合、別のファイルを作成して出力します。
QueueHandlerキューにメッセージを送ります。
NullHandlerエラーメッセージに対して何もしません。

 

ステップ3 : フォーマッタの作成

フォーマッタではログメッセージの形式を定義します。

時刻-メッセージの深刻度-メッセージの内容のような形式を設定する事ができます。

formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')

 

ここではフォーマットの一覧を掲載しておきます。

詳細については公式サイトを確認してください。

便利なハンドラー
フォーマット概要
 %(asctime)sLogRecord が生成された時刻を人間が読める書式で表したもの
(デフォルトでは “2003-07-08 16:49:45,896” 形式)
%(created)fLogRecord が生成された時刻
(time.time() によって返される形式)
 %(filename)spathname のファイル名部分
%(funcName)sロギングの呼び出しを含む関数の名前
%(levelname)sロギングレベル (‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’, ‘CRITICAL’)
%(levelno)sロギングレベル(数値)
%(lineno)dロギングの呼び出しが発せられたソース行番号
%(message)sログメッセージ
%(module)sモジュール名
%(msecs)dLogRecord が生成された時刻(ミリ秒)
%(name)sロギングに使われたロガーの名前
%(pathname)s呼び出したファイルのパス名
%(process)dプロセスID
%(processName)sプロセス名
%(relativeCreated)dlogging モジュールが読み込まれた時刻に対する、LogRecord が生成された時刻(ミリ秒)
%(thread)dスレッドID
%(threadName)sスレッド名

 

ステップ4 : ハンドラーにフォーマッタを設定

作成したフォーマッタをハンドラーに紐づけます。

ハンドラー単位で別のフォーマットを使用することができます。

 

ステップ5 : ロガーにハンドラーを追加

ハンドラーをロガーに紐づけます。

1つのロガーに複数のハンドラーを使用することも可能です。

 

以下の例では、ロガーの出力を2つ(標準出力とファイル出力)にしています。

from logging import getLogger
import logging

# 1. ロガーを取得する
logger = getLogger(__name__)
logger.setLevel(logging.INFO)  # 出力レベルを設定

# 2. ハンドラーを作成する
ch = logging.StreamHandler() #ハンドラー1
ch.setLevel(logging.INFO) # 出力レベルを設定

fh = logging.FileHandler('sample.log') #ハンドラー2
fh.setLevel(logging.DEBUG) # 出力レベルを設定


# 3. フォーマッタを作成する
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 4. ハンドラーにフォーマッターを設定する
ch.setFormatter(formatter)
fh.setFormatter(formatter)

# 5. ロガーにハンドラーを追加する
logger.addHandler(ch)
logger.addHandler(fh)

 

まとめ

Pythonでログ出力をする一般的な方法であるLoggingパッケージの使い方を解説しました。

Loggingパッケージでログ出力するためには、以下の5つの工程で実施可能です。

ログを出力することで、プログラムの不具合を見つけやすくなるのでぜひ使ってみてください。

 

参考文献

Logging HOWTO
著者, Vinay Sajip ,. このページはチュートリアルです。レファレンスやロギングクックブックは、 その他のリソース を参照してください。 基本 logging チュートリアル: logging は、あるソフトウェアが実行されているときに起こったイベントを追跡するための手段です。ソフトウェアの開発者は、特定の...

コメント

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