我是 Flask 的新手,但多年来一直在使用 Django,所以我很困惑为什么它的行为如此不同。
我希望任何旧的通用异常都不会被捕获并一直传播到 Gunicorn,而是由 两者 一个自定义 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 警报,但没有很好的错误页面。
如何获得自定义错误页面和哨兵警报?