【发布时间】:2021-06-29 11:15:28
【问题描述】:
与this 中提出的问题类似,我正在尝试将所有未处理的错误推送到我们的遥测管道,以便为工程师提供足够的信息来调试问题。
未处理的异常处理程序是通过以下方式设置的:
window.onerror = (event: Event | string, source?: string, lineno?: number, colno?: number, error?: Error) => {
const message: string = `src: ${source} line: ${lineno} col: ${colno}`;
logError(error || new Error(event.toString()), message);
};
这似乎与documentation 内联。
在遥测开始流动后,我观察到以下情况:
- 对于大多数处理程序调用,
error变量为空。 -
lineno和colno也是null或0。
我知道CROSSORIGIN 设置并且它似乎设置正确。
我找不到任何严格的规则来描述在未处理的回调期间提供的信息。我也在寻找有关我们设置未处理回调的方式的反馈以及潜在改进的想法。
【问题讨论】:
-
服务器是否也设置了 CORS 标头?这些值是真的
null还是只是未定义(JSON.stringify转换为null)? -
您能否展示您的
logError函数的作用或告诉我们您如何确定错误变量为空?我已经用各种奇怪的错误测试了你的处理程序,它应该可以正常工作,除了不处理失败的请求/其他承诺。 -
logError 非常简单。它只是检查错误是否是
Error的实例并提取消息和堆栈并将其推送到遥测端点。 -
Here's a plunk 进行了一些测试。即使在你有
throw null的情况下它仍然有效(因为你有error || new Error(...))。这让我相信问题可能出在这个遥测数据的摄取点。顺便说一句,我最近花了一些时间为我的组织设置 Sentry。它可以设置为在堆栈跟踪中显示打字稿源代码行,而不是缩小的 javascript 代码。 -
您是否在客户端检查过
error是否为null?
标签: javascript typescript exception