
以前の記事(pythonファイル参照guiの作成(tkinter-モジュール))では、
任意のファイルを選択させるダイアログを表示するプログラム を作成しました。
今回は、loggingモジュールでログ出力を行いたいと思います。
ログの出力
以下のソースでは、プログラムを実行したフォルダにlog.txtと言う名前の
ファイルを出力します。
出力メッセージは「プログラム開始」と出力します。
1 2 3 4 5 6 7 |
import logging logging.basicConfig(filename='log.txt', level=logging.INFO, format=' %(asctime)s - %(levelname)s - %(message)s') logging.info('プログラム開始') logging.disable(logging.CRITICAL) |
loggingプログラム解説
logging.info(‘プログラム開始’) の部分で、ログに出力する文字列を指定しています。
filename=’log.txt’の部分で、出力するファイル名を指定しています。省略可。
level=logging.INFOの部分で、ログレベル(※)を指定しています。
logging.disable(logging.CRITICAL)でログ出力を無効化します。
format=’ %(asctime)s – %(levelname)s – %(message)s’の部分で、
以下の形式で出力が行われます。
2020-03-26 21:55:51,818 – INFO – プログラム開始
(※)Pythonのログレベル
レベル | ログ出力関数 | 説明 |
DEBUG | logging.debug() | 最低レベル。詳細情報用。 問題解析用に用いることが多い。 |
INFO | logging.info() | 各種イベントの情報を記録したりプログラムの要所で動作確認をしたりするために用いる。 |
WARNING | logging.warning() | プログラムが機能しないことはないが将来そうなりそうな潜在的な問題を示すのに用いる。 |
ERROR | logging.error() | プログラムが何か動作に失敗したことによるエラーを記録するために用いる。 |
CRITICAL | logging.critical() | 最高レベル。プログラムが実行を中止する致命的なエラーが起こったか起ころうとしていることを示すのに用いる。 |
print()との棲み分け
同じ様な動作をするものとして、print()文があります。
ユーザーに見せるべきメッセージは、print()を使うべきです。
一方、ログメッセージは、ユーザー用ではなく、プログラマー用のものとして
棲み分けが出来ます。
理由は、ログメッセージが logging.disable(logging.CRITICAL)で出力を無効化 できることに由来します。
プログラマーは開発中のプログラム内の変数の変遷などを確認するために、
ログメッセージを出力しますが、開発後は必要ありません。
仮にこの出力をprint()で出力した場合、開発後は、print()を
一つ一つ消していく必要があります。
しかし、 ログメッセージ の場合、logging.disable(logging.CRITICAL)を
一行加えてしまえば、ログメッセージ出力を無効化することができます。
たった一行で出力を無効化できるなら合理的ですね。
ログメッセージのファイル出力の有効性
前述の通り、logging.basicConfig()関数は、 filename=と言うキーワード引数をとります。
ログメッセージは便利ですが、画面にたくさん表示されると、プログラム本来のメッセージを読むのが困難になります。ログメッセージをファイルに書き出すことにより、画面はすっきりし、ファイルに保存されたメッセージを
プログラム実行後に読むことができます。
例外処理と処理の継続方法
pythonでエラー(例外)が起きると、プログラムは異常終了します。
しかし、場合によっては、プログラムを継続したい場合があります。
その為、プログラムがエラーを検出したら、適切に処理して、
実行を続けるようにします。
以下のソースコードはエラー検出内容をログメッセージとして
ファイルに書き出す方法を記載します。
1 2 3 4 5 6 7 8 9 |
import logging import traceback logging.basicConfig(filename='log.txt', level=logging.INFO, format=' %(asctime)s - %(levelname)s - %(message)s') try: zeroDivide = 100 / 0 # 0で割り算をしてあえてエラー出力 except: logging.error(traceback.format_exc()) |
tracebackプログラム解説
pythonでエラー(例外)が起きると、トレースバックを生成します。
このトレースバックを利用するために、 import tracebackモジュールの
traceback.format_exc()を利用して、文字列を取得します。
出力結果は以下です。
1 2 3 4 |
2020-03-26 23:27:46,486 - ERROR - Traceback (most recent call last): File "openFile.py", line 43, in <module> zeroDivide = 100 / 0 # 0で割り算をしてあえてエラー出力 ZeroDivisionError: division by zero |

コメント