【问题标题】:Can I re-create an error object with the original stack and stack frames?我可以使用原始堆栈和堆栈帧重新创建错误对象吗?
【发布时间】:2019-09-19 23:20:59
【问题描述】:

我熟悉像这样在 JavaScript 中创建 custom Error object

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

但是考虑到已经在其他地方抛出的异常/错误,我想创建一个新的错误对象,它是原始的克隆/副本,包括堆栈。

我的上下文是我正在使用日志报告器,例如Winston,用于捕获事件,我想将错误消息发布到 Sentry。 Sentry 提供了一种像这样capture exceptions 的方法 -

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

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

Sentry 的一个好处是它可以报告应用程序中发生错误的行号,但是因为我正在汇总日志,所以原始错误中的堆栈帧已经丢失。我可以保存可以发送到 Sentry 的其他元数据,但它仍然突出显示以 Sentry.captureException 作为错误来源的行以及调用 Winston 的堆栈帧。

【问题讨论】:

  • Error.captureStackTrace 是什么?这听起来确实像一个 XY 问题
  • @JonasWilms Error.captureStackTrace 来自我链接到的 MDN 文档。我试图避免它成为 XY 问题描述。
  • The global Error object contains no methods of its own ...您链接的文档
  • @JonasWilms 在页面底部附近有一个代码示例。我也不知道captureStackTrace - 它不是标准规范的一部分developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

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


【解决方案1】:

Sentry SDK 从您传递给captureExceptionError 对象组装一个JSON 有效负载。我认为您只想直接组装该有效负载并使用captureEvent 发送它。请参阅https://docs.sentry.io/development/sdk-dev/attributes/ 了解更多信息。

【讨论】:

    猜你喜欢
    • 2014-10-25
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 2017-06-06
    相关资源
    最近更新 更多