プログラムの実行中に起こった出来事の記録をログといい、記録を取ることを「ログを取る」や「ロギング」といいます。
プログラムの実行時にエラーが発生する場合は、その状態をログとして残すことで、バグの解決に役立てることができます。また、開発中のプログラムである場合には、実行中の状態をログに出力することで、想定通りに動作しているかを確認することができます。
今回は、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')
実行結果は以下の通りです。
コードの途中でログレベルを変更する
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 ファイルを指しています。
実行結果は以下のようになります。
コメント