Можно ли заново создать объект ошибки с исходным стеком и кадрами стека? - PullRequest
0 голосов
/ 01 мая 2019

Я знаком с созданием пользовательского объекта Error в JavaScript следующим образом.

class CustomError extends Error {
  constructor(args) {
    super(...args);
    Error.captureStackTrace(this, CustomError);
  }
}

Но, учитывая исключение / ошибку, которая уже была сгенерирована в другом месте, я хочу создатьновый объект ошибки, который является клоном / копией оригинала, включая стек.

Мой контекст таков: я использую репортер журналов, например, Winston , для захвата событий, и я хотел бы публиковать сообщения об ошибках в Sentry.Sentry предоставляет способ захвата исключений следующим образом -

try {
    aFunctionThatMightFail();
} catch (err) {
    Sentry.captureException(err);
}

Проблема, однако, заключается в том, что Sentry предполагает, что в месте, где зафиксирована ошибка, находится ее ошибка.

Одним из преимуществ Sentry является то, что он может сообщать номера строк о том, где произошла ошибка в приложении, но поскольку я объединяю журналы, кадр стека из исходной ошибки был потерян.Я могу сохранить дополнительные метаданные, которые я могу отправить в Sentry, но он по-прежнему выделяет строку с Sentry.captureException в качестве источника ошибки и кадры стека от вызова Winston.

enter image description here

1 Ответ

1 голос
/ 02 мая 2019

Sentry SDK собирает полезную нагрузку JSON из объекта Error, который вы передаете captureException. Я думаю, вы просто захотите собрать эту полезную нагрузку напрямую и отправить ее, используя captureEvent. См. https://docs.sentry.io/development/sdk-dev/attributes/ для получения дополнительной информации.

...