あらすじ
以下のコードを実行すると
# -*- coding: utf-8 -*- import logging import traceback try: raise Exception('!!') except Exception as e: logging.error(e)
こういう感じになります。
:!python % ERROR:root:!!
traceback が欲しい
import traceback
こういう書き方ができるようです。
# -*- coding: utf-8 -*- import logging import traceback try: raise Exception('!!!') except Exception as e: logging.error(traceback.format_exc())
実行結果
:!python % ERROR:root:Traceback (most recent call last): File "test.py", line 6, in <module> raise Exception('!!!') Exception: !!!
logging.exception
あとこういうやり方もあります
# -*- coding: utf-8 -*- import logging try: raise Exception('!!!!') except Exception as e: logging.exception(e)
実行結果
:!python % ERROR:root:!!!! Traceback (most recent call last): File "test.py", line 5, in <module> raise Exception('!!!!') Exception: !!!!
logging と logger
logging モジュールからも info(), debug() といった関数が呼び出せますが基本的には logger を使ったほうが良いでしょう。
# -*- coding: utf-8 -*- from logging import getLogger, StreamHandler, DEBUG logger = getLogger(__name__) handler = StreamHandler() handler.setLevel(DEBUG) logger.setLevel(DEBUG) logger.addHandler(handler) try: raise Exception('!!!!') except Exception as e: logger.exception(e)
これぐらいの規模でしたら logging.exception(e) でも良いと思いますが logging から 直接 log() なメソッドは呼び出さないほうが良い、という覚え方でも良いのかな。
Python Logging Best Practices ~ Pieces of Mind
https://itunes.apple.com/jp/album/fly-till-i-die/id6652815?i=6652793&uo=4&at=1l3vw5g