【问题标题】:Add additional details to a Sentry error using Python SDK使用 Python SDK 向 Sentry 错误添加其他详细信息
【发布时间】:2021-12-01 04:03:43
【问题描述】:

在很多情况下,我知道会发生错误并希望将其他数据传递给 Sentry。我仍然希望引发异常(因此我的其余代码停止)并且我只希望哨兵出现一个错误。

例如,假设我正在进行 HTTP 调用,如果 HTTP 调用失败,我想要一个错误,包括发送到 Sentry 的响应文本:

import requests

resp = requests.post(url, json=payload)
if resp.ok:
    return resp.json()
try:
    text = resp.json()
except json.JSONDecodeError:
    text = resp.text
# TODO: add `text` to Sentry error
resp.raise_for_status()

如何使用 Sentry Python SDK 执行此操作?

被拒绝的解决方案:

  • Sentry 的日志记录:这会导致 sentry 出现两个错误(一个用于日志语句,一个用于引发的异常)
  • capture_expection:这会导致哨兵出现两个错误(一个是捕获的异常,一个是引发的异常)
  • 向异常消息添加额外的详细信息:这会破坏 Sentry 的错误分组,因为每个错误都有一个唯一的名称

【问题讨论】:

    标签: python sentry


    【解决方案1】:

    您要查找的函数是 Sentry 的set_context。您想在引发异常之前立即调用此函数。

    注意:您应该只在肯定会引发异常的情况下调用set_context,否则您设置的额外信息可能会添加到 Sentry 中的其他(不相关)错误中。

    例如:

    import requests
    import sentry_sdk
    
    resp = requests.post(url, json=payload)
    if resp.ok:
        return resp.json()
    try:
        text = resp.json()
    except json.JSONDecodeError:
        text = resp.text
    # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    sentry_sdk.set_context("Payload", {"text": text})
    # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    resp.raise_for_status()
    

    这会将其作为附加数据附加到您的 Sentry 错误中,在面包屑之后列出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-20
      相关资源
      最近更新 更多