[Python] ログ出力の基本

Python logging
Python
スポンサーリンク

プログラムの実行中に起こった出来事の記録をログといい、記録を取ることを「ログを取る」や「ロギング」といいます。

プログラムの実行時にエラーが発生する場合は、その状態をログとして残すことで、バグの解決に役立てることができます。また、開発中のプログラムである場合には、実行中の状態をログに出力することで、想定通りに動作しているかを確認することができます。

今回は、Python の標準モジュールである logging を使用した、ログ出力の基本について説明をします。

 

環境

Python 3.9.1

VSCode1.52.1

 

logging のインポート

 

logging は冒頭でも述べた通り、Python の標準モジュールですので、特別なインストールは不要です。

以下のコードを貼り付ければ、logging モジュールが使用可能になります。

import logging

 

ログの種類とレベル

ログには「エラー」や「デバッグ」といった種類があり、Python では以下表に示す5つのレベルに分けられています。下に行くほどログレベルは高くなります。

 

種類 説明
DEBUG デバッグ。開発時の動作確認
INFO インフォーメーション(情報)。想定された通りの動作を示す
WARNING ワーニング(警告)。想定外のことが起こったことを示す
ERROR エラー。重大な問題によって、プログラムがのある機能が実行できないことを示す
CRITICAL クリティカル。プログラム自体が実行を続けられないことを示す

ログの出力例を以下に示します。

loggingSample.py

import logging

logging.debug('debug')
logging.info('info')
logging.warning('warnig')
logging.error('error')
logging.critical('critical')

実行結果は以下のようになります。logging はデフォルトでは DEBUG、INFO は出力されないようになっています。

実行結果

実行結果

ログの出力レベルを変更する

先ほど説明した通り、デフォルトでは DEBUG、INFO は出力されません。

出力レベルを変更するには basicConfig メソッドを使用します。basicConfig は logging.debug や logging.info(‘info’) などよりも前に実行する必要があります。

loggingSample.py

import logging

# 出力レベルの設定
logging.basicConfig(level=logging.DEBUG)

logging.debug('debug')
logging.info('info')
logging.warning('warnig')
logging.error('error')
logging.critical('critical')

実行結果は以下のようになります。

ログ出力レベル変更後の実行結果

ログ出力レベル変更後の実行結果

ログの出力レベル(level=logging.DEBUGの部分)に指定できる値は、以下表のように決められています。

先ほどのコードでは logging.DEBUG を指定したので、数値が10(DEBUG)以上のもの出力されたというわけです。

 

レベル 数値
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
NOTSET 0

よって、ERROR と CRITICAL のみを出力させたい場合には、以下のようにします。

loggingSample.py

import logging

# 出力レベルの設定(ERROR 以上を出力)
logging.basicConfig(level=logging.ERROR)

logging.debug('debug')
logging.info('info')
logging.warning('warnig')
logging.error('error')
logging.critical('critical')

実行結果は以下の通りです。

level=logging.ERROR へ変更後の実行結果

level=logging.ERROR へ変更後の実行結果

コードの途中でログレベルを変更する

basicConfig() メソッドを使用すると、ログの出力レベルを設定できると説明をしました。

例えば、以下のようにすると、プログラムが終了するまでログの出力レベルは warrning となりますす。

# 出力レベルの設定(WARNING 以上を出力) 
logging.basicConfig(level=logging.WARNING)

コードの一部分のみログ出力レベルを変更したい場合もあるでしょう。

このような場合は、setLevel() メソッドを使用すると、以降のログ出力レベルを変更することができます。

loggingSample.py

# 出力レベルの設定
logging.basicConfig(level=logging.WARNING)
print('ログ出力レベル=WARNING に設定')
logging.debug('debug')
logging.info('info')
logging.warning('warnig')
logging.error('error')
logging.critical('critical')

# 出力レベルの変更
logging.root.setLevel(logging.DEBUG)

print('ここからログ出力レベル=DEBUG')
logging.debug('debug')
logging.info('info')
logging.warning('warnig')
logging.error('error')
logging.critical('critical')

 

上記のコードでは、11行目の logging.root.setLevel(logging.DEBUG) でログの出力レベルを DEBUG に変更しています。

root というのは、プログラムで最初に実行されるpython ファイルを指しています。

実行結果は以下のようになります。

setLevel によるログ出力レベルの変更

setLevel によるログ出力レベルの変更

Please follow and like us:

コメント

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