在我们的烧瓶应用程序中,Sentry在Web UI中显示异常WITH堆栈跟踪,用于未捕获的异常,如下所示:
p = np.array([list(t) for t in zip(centroid, sigma, height)]).flatten()
popt, pcov = curve_fit(trimodal_gauss,my_x,my_y,p0=p])
但是在使用记录器的捕获异常中如此:
a = 1/0
sentry UI仅显示已记录的消息,而不显示堆栈跟踪。
关于Sentry最佳实践(在python中):
try:
1/0
except Exception as e:
logger.exception('OH NOS occured: ')
吗?查看正在发送的JSON raven.client.captureException()
甚至不是JSON主体的一部分,但仍然会发送要记录的消息。
其他信息(10/27/17):
文件结构设置:
"sentry.interfaces.Exception"
在logging config dict中,app和utils记录器包含一个定义为sentry的处理程序。现在这里有趣的地方。在文件utils.crasher中我有:
flask_app/
|--app
|--utils
并在app.main
中import logging
logger = getLogger(__name__)
def crash_boy():
try:
1 + '123'
except Exception as e:
logger.exception('Oh gosh we messed up big time here')
raise e
Sentry将显示来自utils记录器的异常消息和堆栈跟踪,但应用程序记录器将仅记录错误消息(@bp.route('/crash')
def crash():
try:
return crash_boy()
except Exception as e:
logger.exception('OH GREAT')
return 'WE HAD A CRASH BOIZ'
)。
答案 0 :(得分:0)
默认情况下,Python日志记录不会捕获堆栈跟踪。
第二个可选的关键字参数是 stack_info ,默认为
False
。如果为true,则将堆栈信息添加到日志消息中,包括实际的日志记录调用。
尝试改为:
logger.exception('OH NOS occured: ', stack_info=True)
您是否需要“手动”调用raven.client.captureException()
?这取决于你如何配置它,但如果你已经使用了Flask(as documented here)推荐的实现,那么没有:
配置Sentry应用程序后,它将自动捕获Flask中未捕获的异常。