我可以使用原始堆栈和堆栈帧重新创建错误对象吗?

时间:2019-05-01 11:22:21

标签: javascript node.js error-handling sentry winston

我熟悉用JavaScript这样创建custom Error object

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

但是鉴于已经在其他地方抛出的异常/错误,我想创建一个新的错误对象,该对象是包括堆栈在内的原始对象的副本/副本。

我的情况是我正在使用日志报告器,例如Winston,以捕获事件,我想向Sentry发布错误消息。哨兵提供了一种capture exceptions的方式-

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

问题是,Sentry假定捕获错误的位置就是引发错误的位置。

Sentry的好处之一是它可以报告应用程序中发生错误的位置的行号,但是由于我正在聚合日志,因此原始错误的堆栈帧已丢失。我可以保存其他可以发送给Sentry的元数据,但是它仍然突出显示以Sentry.captureException作为错误源以及调用Winston的堆栈帧的行。

enter image description here

1 个答案:

答案 0 :(得分:1)

Sentry SDK从传递给Error的{​​{1}}对象中组装一个JSON有效负载。我认为您只想直接组装该有效负载并使用captureException发送即可。有关更多信息,请参见https://docs.sentry.io/development/sdk-dev/attributes/