この記事を読むと、プログラムの実行結果をログファイルに出力する方法が分かります。
プログラムがある程度、書けるようになると、print文で実行内容を確認するだけでは、プログラムの実効結果の確認に不便を感じるようになります。
- 大量に処理結果が表示され、エラーの状況が分かりにくい。
- エラーが複数発生した場合に、どんなエラーか記録するのに手間がかかる。
- 処理した状況(件数や、処理時間)を後から確認したい。
そのため、ログファイルの出力方法がわかれば、上記のような課題を解決することができます。
loggingパッケージでログファイルを出力する。
loggingパッケージは、はじめに、logging.basicConfigのパラメータを指定します。
ログファイル名、ログファイルの文字コード、ログ出力レベルを指定します。
ログ出力レベルでは、DEBUG、INFO、WARNING、ERRORを指定することで、ログファイルに出力されるプログラムを制御することができます。
サンプル1
loggingパッケージを使用したプログラムサンプルは以下のとおりです。
import logging
logging.basicConfig(filename='sample.log', encoding='utf-8', level=logging.INFO)
# filename = ログファイル名
# encoding = ログファイルの文字コード
# level = ログ出力レベル
logging.debug( 'デバッグメッセージ'' )
logging.info( 'インフォメーションメッセージ' )
logging.warning( 'ワーニングメッセージ' )
logging.error( 'エラーメッセージ' )
sample.logの出力例
NFO:root:インフォメーションメッセージ
WARNING:root:ワーニングメッセージ
ERROR:root:エラーメッセージ
level=loggin.INFOとしたため、「デバッグメッセージ」がファイルに出力されていません。
ファイルが既に存在する場合は、追記されます。
サンプル2
追記ではなく、毎回、新規にログファイルを出力する場合は、filemode=’w’を指定します。
import logging
logging.basicConfig(filename='sample.log', encoding='utf-8', level=logging.INFO,
filemode='w')
# filename = ログファイル名
# encoding = ログファイルの文字コード
# level = ログ出力レベル
# filemode = 'w' ログファイルを上書き
logging.debug( 'デバッグメッセージ'' )
logging.info( 'インフォメーションメッセージ' )
logging.warning( 'ワーニングメッセージ' )
logging.error( 'エラーメッセージ' )
ログ出力レベルと実行されるプログラムとの関係を以下に示します。
プログラム例 ログ出力レベル | logging.debug(‘デバッグメッセージ’) | logging.info(‘インフォメーションメッセージ’) | logging.warning(‘ワーニングメッセージ’) | logging.error(‘エラーメッセージ’) |
level=logging.DEBUG | ○ | ○ | ○ | ○ |
level=logging.INFO | ー | ○ | ○ | ○ |
level=logging.WARNING | ー | ー | ○ | ○ |
level=logging.ERROR | ー | ー | ー | ○ |
サンプル3
ログの出力形式を指定したい場合は、以下のように引数(%s)として指定できます。
import logging
logging.basicConfig(filename='sample.log', encoding='utf-8', level=logging.INFO)
# filename = ログファイル名
# encoding = ログファイルの文字コード
# level = ログ出力レベル
# filemode = 'w' ログファイルを上書き
logging.info(' %s == %s', 'log', 'sample.log')
sample.logの出力例
INFO:root: log == sample.log
メッセージの形式を指定する。
logging.basicConfigで、ログファイルに出力されるメッセージの形式を変更することができます。
サンプル1
loggingパッケージを使用したプログラムサンプルは以下のとおりです。
%(asctime)s :日付と時刻を表示する。
%(levelname)s :ログレベルを表示する。
%(message)s :メッセージを表示する。
import logging
logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s',
filename='sample.log', encoding='utf-8', level=logging.INFO)
# filename = ログファイル名
# encoding = ログファイルの文字コード
# level = ログ出力レベル
# filemode = 'w' ログファイルを上書き
logging.info(' %s == %s', 'log', 'sample.log')
sample.logの出力例
2022-05-01 12:34:56,001:INFO: log == sample.log
「2022-05-01 12:34:56,001:INFO:」が、
logging.basicConfigのformat引数(%(asctime)s、%(levelname)s)で指定したメッセージ形式。
「log == sample.log」が、
logging.infoの引数(‘ %s == %s’, ‘log’, ‘sample.log’)で指定したメッセージ形式。