Python のデバッグ情報でエラーをログに記録する
-
Python で
exception()
メソッドを使用して詳細なデバッグ情報を含むエラーをログに記録する -
Python 3.2 以降の詳細なデバッグ情報で
stack_info
でexception()
メソッドを使用してエラーをログに記録する -
Python 3.5 以降の詳細なデバッグ情報で
exc_info
でexception()
メソッドを使用してエラーをログに記録する
この記事では、Python で詳細なデバッグ情報を使用してエラーをログに記録する方法について説明します。
詳細なデバッグ情報を表示するには、Python で logging
ライブラリをインポートし、logging.exception()
メソッドを利用します。エラーメッセージとスタックトレースが表示されます。
例外文字列は、Python で発生した正確なエラーを理解するのに役立つことがわかっています。これとは別に、例外と例外を生成したコード行に関する詳細情報を特定できます。
except
コードブロック内で logging.exception()
メソッドを呼び出します。これは、エラーメッセージとともにスタックトレースを表示するのに役立ちます。このロガーでは、レベル ERROR
でメッセージをログに記録します。例外情報がログメッセージに追加されます。
Python で exception()
メソッドを使用して詳細なデバッグ情報を含むエラーをログに記録する
これは、Python で詳細なデバッグ情報を使用してエラーをログに記録する方法を示す例です。
import logging
def fnc_divide(n):
try:
result = n / 0
print("The result=", result)
except:
print("The except block")
logging.exception("The detailed error message -")
fnc_divide(5)
出力:
The except block
ERROR:root:The detailed error message -
Traceback (most recent call last):
File "C:/Users/../a.py", line 4, in fnc_divide
result=n/0
ZeroDivisionError: division by zero
出力には、以下に示すエラーに関する詳細情報が表示されていることに注意してください。
- エラーが発生したモジュール/機能について言及しています。この例では、出力は、
fnc_divide()
メソッド内でエラーが発生したことを示しています。 - エラーが発生した行番号が記載されています。この例では、出力はエラーが行番号 4 で発生したことを示しています。
- 正確なエラーについて言及しています。この例では、
ZeroDivisionError: division by zero
です。
Python 3.2 以降の詳細なデバッグ情報で stack_info
で exception()
メソッドを使用してエラーをログに記録する
Python 3.2 以降では、stack_info
引数を True
として渡すことができます。これは、コードの特定のポイントに到達した方法を示しています。これは、例外が発生しない場合にも当てはまります。
stack_info
が True
の場合、スタック情報はロギングメッセージと実際のロギング呼び出しに追加され、スタックフレームに順番に関連付けられます。順序は、スタックの最下位から現在のスレッドのロギング呼び出しまでです。
以下のこのサンプルコードを見てください。
import logging
def fnc_dividestack(n):
try:
result = n / 0
except Exception:
logging.exception("The detailed error message -", stack_info=True)
fnc_dividestack(4)
出力:
ERROR:root:The detailed error message -
Traceback (most recent call last):
File "C:/Users/Ri..error.py", line 5, in fnc_dividestack
result=n/0
ZeroDivisionError: division by zero
Stack (most recent call last):
File "C:/Users/Ri..error.py", line 9, in <module>
fnc_dividestack(4)
File "C:/Users/Ri..error.py", line 7, in fnc_dividestack
logging.exception("The detailed error message -", stack_info=True)
Python 3.5 以降の詳細なデバッグ情報で exc_info
で exception()
メソッドを使用してエラーをログに記録する
Python 3.5 以降では、exc_info
引数で例外インスタンスを渡すことができます。このパラメーターは、例外インスタンスを受け入れます。
例外が発生した場合、exc_info
タプルは現在の例外情報を保持することに注意してください。それ以外の場合は、None
を保持します。以下は、このプロセスを示す例です。
import logging
def fnc_divide(n):
try:
result = n / 0
print("The result=", result)
except Exception as e:
logging.exception("The exc_info - Zero Division error", exc_info=e)
fnc_divide(5)
出力:
ERROR:root:The exc_info - Zero Division error
Traceback (most recent call last):
File "C:/Users/R..ror.py", line 4, in fnc_divide
result=n/0
ZeroDivisionError: division by zero