Что эквивалентно передаче дополнительного словаря для captureException в новом sentry-python SDK? - PullRequest
0 голосов
/ 05 декабря 2018

Каков наилучший способ передать дополнения в новые методы sentry-python SDK для capture_exception и capture_message?

Ранее я хотел бы: sentry_id = sentry.captureException(extra=extra)

На основе документов иэта проблема с github (https://github.com/getsentry/sentry-python/issues/113), похожа на одну из следующих опций, сравнима, но я не могу найти способ.

Использование capture_exception близко ...

except Exception as e:
    sentry_id = capture_exception(e, extra=extra) # Error

... но не учитывает параметр второго дополнительного: (

Использование интеграции регистрации Python очень близко ...

except Exception as e:
    sentry_id = logging.error(e, exc_info=True, extra=extra)

... но не возвращает часовой идентификатор: (

При использовании и интеграция регистрации Python, и capture_exception близко ...

except Exception as e:
    logging.error(e, exc_info=True, extra=extra)
    sentry_id = capture_exception(e)

... но приводит к двум отдельным записям об ошибках в sentry: (

Использование capture_exception с push_scope близко ...

except Exception as e:
    with push_scope() as scope:
        scope.set_extra(extra) # Error
        sentry_id = capture_exception(e)

... но не 'принять словарь: (

- это решение использовать последний способ, с помощью вспомогательной функции, которая распаковывает лишний диктант в mлюбые scope.set_extra(key, val) звонки?

Спасибо за помощь!

1 Ответ

0 голосов
/ 06 декабря 2018
except Exception as e:
    with push_scope() as scope:
        for k, v in extra.items():
            scope.set_extra(k, v)
        sentry_id = capture_exception(e)

Однако я бы сказал, что вы устанавливаете extra в неправильный момент времени.В идеале вы должны установить дополнительные данные контекста, как только они станут доступны и соответствовать коду, который выполняется в настоящее время.Нажатие области только для вызова capture_exception указывает на проблему с тем, как вы структурируете свои вызовы на set_extra.

Вместо этого:

logger.error("Event via logging", extra={"foo": 42})

try:
    1/0
except Exception:
    with push_scope() as scope:
        scope.set_extra("foo", 42)
        capture_exception()

Сделайте это:

with push_scope() as scope:
    scope.set_extra("foo", 42)
    logger.error("Event via logging")

    try:
        1/0
    except Exception:
        capture_exception()
...