如何在 raven/sentry 中记录带有上下文的完整调用堆栈?

How to log full call-stack with context in raven/sentry?

当在调用堆栈的根上捕获引发的异常时,我可以在 Sentry 中的每个调用堆栈级别看到整个上下文。

但是,当我使用 captureMessage() 时,我在 Sentry 中看不到任何上下文。

如果我在下面的代码中使用 captureException(),我只能看到调用堆栈的顶部。

try:
    raise Exception('Breakpoint!')
except:
    raven_client.captureException()

换句话说,我想在 Sentry 中看到一条包含完整堆栈跟踪和上下文的记录消息。

Python SDK 能够通过将 stack=True 传递给 captureMessage:

来捕获任意堆栈跟踪
raven_client.captureMessage('hello world', stack=True)

还有一个 auto_log_stacks 值可以在配置客户端时打开:

raven_client = Client(..., auto_log_stacks=True)

警告:自动记录堆栈很有用,但在某些常见情况下不能保证准确。这也是一个性能问题,尽管是一个小问题,因为它必须不断调用 inspect.stack().