Python の logging では、Formatter を使用することで、さまざまな情報を付加して、よりわかりやすいログを出力することができます。
今回は、この Formatter の使用方法について説明します。
環境
Python 3.9.1
VSCode1.52.1
ログ出力時のフォーマットを設定する
ログ出力時のフォーマットを設定するには、冒頭でも説明した通り Formatter を使用します。
以下にサンプルコードを示します。
ログ出力フォーマットのサンプルコード
import logging import logging.handlers # ロガーを取得 log = logging.getLogger(__name__) # ログ出力レベルの設定 log.setLevel(logging.DEBUG) # ローテーティングファイルハンドラを作成 rh = logging.handlers.RotatingFileHandler( r'./log/app.log', encoding='utf-8', maxBytes=1000, backupCount=3 ) # ログ出力レベルの設定 rh.setLevel(logging.DEBUG) # ログ出力のフォーマットを作成 rh_formatter = logging.Formatter('%(asctime)s : %(levelname)s - %(filename)s - %(message)s') # 作成したフォーマットをフォーマッタに設定 rh.setFormatter(rh_formatter) # ロガーに追加 log.addHandler(rh) # ログの出力 log.debug('デバッグです') log.info('インフォメーションです') log.warning('警告です') log.error('エラーです') log.critical('重大なエラーです')
1〜17行目は、ログのファイルローテーティング設定です。詳細は「[Python] ログのファイル出力とログローテーション」の記事を参照してください。
20行目が、ログ出力時のフォーマットを設定しているコードです。「%(xxx)s」という文字列が並んでいますが、それぞれ、ログ出力時刻、ログレベル、ログを出力したファイル名、メッセージ、に置換されます。
22行目は、20行目で作成したログ出力時のフォーマットをフォーマッタに設定しています。
23行目は、22行目で作成したフォーマッタをロガーに追加して、使用可能状態にします。
あとはログが出力されるごとに、設定されたフォーマットが適用されます。
出力されたログのサンプルを以下に示します。
app.log
2021-01-03 16:28:04,611 : DEBUG - loggingSample.py - デバッグです 2021-01-03 16:28:04,611 : INFO - loggingSample.py - インフォメーションです 2021-01-03 16:28:04,612 : WARNING - loggingSample.py - 警告です 2021-01-03 16:28:04,612 : ERROR - loggingSample.py - エラーです 2021-01-03 16:28:04,612 : CRITICAL - loggingSample.py - 重大なエラーです
使用可能なログ出力フォーマット文字列
以下に、使用可能なログ出力フォーマット文字列を示します。
フォーマット | 説明 |
---|---|
%(asctime)s | ログの出力時刻 |
%(created)f | ログ出力時刻(time.time()によって返される形式) |
%(filename)s | pathname のファイル名部分。 |
%(funcName)s | ロギングの呼び出しを含む関数の名前。 |
%(levelname)s | メッセージのための文字のロギングレベル (‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’, ‘CRITICAL’)。 |
%(levelno)s | メッセージのための数値のロギングレベル (DEBUG, INFO, WARNING, ERROR, CRITICAL)。 |
%(lineno)d | ロギングの呼び出しが発せられたソース行番号 (利用できる場合のみ)。 |
%(message)s | msg % args として求められた、ログメッセージ。 Formatter.format が呼び出されたときに設定されます。 |
%(module)s | モジュール (filename の名前部分)。 |
%(msecs)d | LogRecord が生成された時刻のミリ秒部分 |
%(name)s | ロギングに使われたロガーの名前。 |
%(pathname)s | ロギングの呼び出しが発せられたファイルの完全なパス名 (利用できる場合のみ)。 |
%(process)d | プロセス ID (利用可能な場合のみ)。 |
%(processName)s | プロセス名 (利用可能な場合のみ)。 |
%(relativeCreated)d | logging モジュールが読み込まれた時刻に対する、LogRecord が生成された時刻を、ミリ秒で表したもの。 |
%(thread)d | スレッド ID (利用可能な場合のみ)。 |
%(threadName)s | スレッド名 (利用可能な場合のみ)。 |
参考:ログレコード属性
Please follow and like us:
コメント