Я использую Sentry для мониторинга рабочего процесса Python, который работает с некоторыми ограничениями. Например, он не может открывать файлы или подключаться к inte rnet. По этой причине я не могу использовать sentry_sdk.capture_exception
напрямую.
Что я могу сделать, это поместить объект в multiprocessing.Queue
, чтобы отправить его родительскому процессу, который может общаться с сервером Sentry. Поэтому я попытался сделать что-то вроде этого:
from sentry_sdk.utils import event_from_exception
try:
# failing code
except Exception:
exc_info = sys.exc_info()
sentry_event = event_from_exception(exc_info)
queue.put(sentry_event)
и затем в родительском процессе sentry_sdk.capture_event(sentry_event)
.
Однако оказывается, что sentry_event
все еще содержит некоторые необработанные Python объекты ( локальные переменные), которые не могут быть выбраны, поэтому поместить их в очередь не удается.
Есть ли способ получить событие, когда данные уже были извлечены, и его можно легко сериализовать, например, как JSON?
Я также спрашивал об этом здесь: https://github.com/getsentry/sentry-python/issues/654