Добавьте дополнительные сведения об ошибке Sentry с помощью Python SDK

#python #sentry

Вопрос:

Есть много ситуаций, когда я знаю, что произойдет ошибка, и хочу передать дополнительные данные Sentry. Я все еще хочу, чтобы возникло исключение (поэтому остальная часть моего кода останавливается), и мне нужна только одна ошибка в 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 (одна для захваченного исключения и одна для вызванного исключения).
  • Добавление дополнительных сведений в сообщение об исключении: это нарушает группировку ошибок 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, указанной сразу после панировочных сухарей:

Скриншот Часового