Pythonの3導入例外チェーンなので、この:処理されない例外でFlaskのログチェーン例外を作成するにはどうすればよいですか?
import logging
logger = logging.getLogger(__name__)
class MyException(Exception):
pass
def blow_up():
try:
impossible = 42/0
except ZeroDivisionError as zde:
raise MyException('Uh oh!') from zde
try:
blow_up()
except:
logger.exception('It blew up!')
は、この生成されます
It blew up!
Traceback (most recent call last):
File "ka-boom.py", line 10, in blow_up
impossible = 42/0
ZeroDivisionError: division by zero
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "ka-boom.py", line 15, in <module>
blow_up()
File "ka-boom.py", line 12, in blow_up
raise MyException('Uh oh!') from zde
MyException: Uh oh!
をしかし、未処理の例外をフラスコビュー方式でスローされますと、__cause__
がログに記録されません、デバッグが難しくなります。
私はこれを行うことができます。
@app.errorhandler(Exception)
def better_exception_handler(error):
current_app.logger.exception('Whoopsie!')
return 'Internal server error', 500
が、私はこのようなすべての例外を捕捉し不快に感じる、それは非常にエレガントな感じがしません。 Flaskの組み込み例外ハンドラを使用して連鎖された例外をログに記録する方法はありますか?
Flaskロガーは、ロギングモジュールでログイベントを階層的に伝播しないように設定されているため、ルートロガーを「聞く」と何も得られない可能性があります。チェインされた例外またはログに記録されたすべてのイベントでのみ発生しますか? – tinproject
@tinproject:ログ(あるいは少なくともコンソール)に例外があり、 'current_app.logger'に送信するすべてのものは、連鎖された例外ではありません。 –