役に立たない例外ログ
名前: 役に立たない例外ログ
症状: ログ出力を行うコードはあるけど、実際に問題が起きたときに役立つ情報がまったく出力されていない
気分: ログに何を出力したらいいか分からないから、とりあえず exception インスタンスをロガーに出しておこう
コード例1
code:python
try:
response = some_api.get_important_data(key)
return response.result.data
except Exception as e:
logger.error(e)
try節でエラーが起きても処理は継続される。
ログには以下のような内容が記録されるが、役に立っていない
"AttributeError: 'NoneType' object has no attribute 'data'"
some_apiから返されたresponse.resultがNoneだというこはわかる
key の値は何だろう? responseの他の値はなんだろう?
コード例2
code:python
try:
...
except:
logger.error('エラーが発生')
エラーが起こったことだけわかるけど、情報はなにもない。コード例1のほうがマシ。
このログが出力されるくらいなら、Exceptionを発生させてプログラム自体をエラーにしたほうが安全。
対策
logger.exception() を使って、例外のトレースバックもログに記録する。このとき key や response の値もログに出力する
code:python
try:
response = some_api.get_important_data(key)
return response.result.data
except Exception as e:
logger.exception('key: %s, response: %r', key, response)
# このコードのままだとresponseが未定義の可能性があるので、修正が必要
そもそも例外を捕まえない処理にする
code:python
response = some_api.get_important_data(key)
if not response:
return None
if response.status != 'OK'
return None
return response.result.data