Sentry没有在web UI中使用logger.exception()显示异常

时间:2017-10-19 22:56:31

标签: python-2.7 sentry

在我们的烧瓶应用程序中,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: ') 吗?
  • 是否应该使用`logger.error('msg',exc_info = True)?

查看正在发送的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' )。

1 个答案:

答案 0 :(得分:0)

默认情况下,Python日志记录不会捕获堆栈跟踪。

the logging documentation

  

第二个可选的关键字参数是 stack_info ,默认为False。如果为true,则将堆栈信息添加到日志消息中,包括实际的日志记录调用。

尝试改为:

logger.exception('OH NOS occured: ', stack_info=True)

您是否需要“手动”调用raven.client.captureException()?这取决于你如何配置它,但如果你已经使用了Flask(as documented here)推荐的实现,那么没有:

  

配置Sentry应用程序后,它将自动捕获Flask中未捕获的异常。