【发布时间】:2021-08-21 02:57:05
【问题描述】:
我是 Flask 的新手,但多年来一直在使用 Django,所以我很困惑为什么它的行为如此不同。
我希望任何旧的通用异常都不会被捕获并一直传播到 Gunicorn,而是由 both 自定义 Flask 错误处理程序 和 处理触发哨兵警报。
这在 Django 中是微不足道的,但不幸的是我在 Flask 中没有找到任何方法来做到这一点。 Sentry 显然在 WSGI 级别工作,这似乎意味着如果我在 Flask 中设置了异常处理程序(见下文),我为了打印自定义错误页面而捕获的异常根本不会进入 Sentry。
@app.errorhandler(Exception)
def internal_server_error(error):
template_name, context = ErrorPages().error500(error)
return (render_template(template_name, **context), 500)
ErrorPages.error500() 方法采用处理程序捕获的异常并将堆栈跟踪打印到适合站点主题的自定义模板中。所以用户不会看到一个可怕的空白空白,除了“内部服务器错误”之外什么都没有。
如果此处理程序代码处于活动状态,我会得到很好的错误页面,但没有 Sentry 警报。如果我将其注释掉,我会收到 Sentry 警报,但没有漂亮的错误页面。
我如何同时获得一个自定义错误页面和一个 Sentry 警报?
【问题讨论】: