完全なスタックトレースを取得できることを示すために、かなり複雑なスタックトレースを作成してみましょう。
def raise_error():
raise RuntimeError('something bad happened!')
def do_something_that_might_error():
raise_error()
完全なスタックトレースのロギング
モジュールにロガーを設定することをお勧めします。モジュールの名前を認識し、(ハンドラーなどの他の属性の中でも)レベルを変更できる
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
そして、このロガーを使用してエラーを取得できます:
try:
do_something_that_might_error()
except Exception as error:
logger.exception(error)
どのログ:
ERROR:__main__:something bad happened!
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
したがって、エラーが発生した場合と同じ出力が得られます。
>>> do_something_that_might_error()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
文字列だけを取得する
本当に文字列が必要な場合は、traceback.format_exc
代わりに関数を使用して、ここで文字列のロギングを示します。
import traceback
try:
do_something_that_might_error()
except Exception as error:
just_the_string = traceback.format_exc()
logger.debug(just_the_string)
どのログ:
DEBUG:__main__:Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
log_error(err)
関数を書いています。