我正在尝试为当前的Web应用程序设置Sentry。它可以是configured to act as a logger。
但是,我有一个异常视图,如下所示:
@view_config(context=Exception,
renderer='hitchedup:templates/errors/500.html')
def error_view(exc, request):
"""Display a friendly error message"""
return {}
这个想法是,只要站点上发生任何异常,我都可以向用户传递友好的消息。
但是,如何仍将错误传递给记录器?现在,“异常”视图捕获了所有异常,但是它们从未到达记录器。
我尝试在Exception视图中引发并捕获内联的
exc
,然后直接通过客户端将其发送给Sentry,但是如果我捕获了最初引发的异常,则无法获得完整的堆栈跟踪信息。如何获得友好的500页并且仍然具有良好的日志记录和错误报告?
最佳答案
裸raise
关键字是工单。
代替使用日志记录,而是在带有友好消息的视图中捕获Exception。然后,使用不带参数的raise
会引发原始异常。捕获异常,并使用Sentry客户端捕获该异常并将其传递。
最终视图如下所示:
from raven.base import Client
from pyramid.view import view_config
@view_config(context=Exception,
renderer='hitchedup:templates/errors/500.html')
def error(context, request):
"""Display an error message and record it in Sentry."""
client = Client()
try:
raise
except Exception:
client.captureException()
return {}