@sentry/browser
@sentry/node
raven-js
raven-node
_(节点乌鸦)_4.4.1
以下事件捕获代码将在解析事件时在 Sentry 中产生错误: Source code was not found for /.../index.js
const Sentry = require('@sentry/node');
Sentry.init({ dsn: 'https://5d29[...][email protected]/13[...]6' });
(async () => {
const sentryEvent = await Sentry.Parsers.parseError(new Error('Test'));
Sentry.captureEvent(sentryEvent);
})();
这是事件在 Sentry 中的样子:
您可以发布活动的直接链接吗?
(您还错过了之前屏蔽的堆栈跟踪屏幕截图中的一些路径😅)
您不直接使用Sentry.captureException
而是想创建自己的事件的任何特殊原因?
是的,这就是事件: https ://sentry.io/share/issue/e2c8d20b66d2406cb32c540d87654b4a/(稍作修改以不发布我们的dsn)
我使用Sentry.captureEvent()
的原因如下:我正在维护一个hapi插件,该插件捕获 hapi 路由处理程序抛出的错误事件(丰富了请求数据)。 参见: hapi-sentry ./index.js#L41-L67
@guischdi出现此错误的原因是远程服务器无法访问本地文件路径。
Sentry 正在尝试获取和解析/something/local/src/app.js
并从中读取源代码以提供更好的错误映射(它与 sourcemap 文件的工作方式相同)。
要上传您的文件,您可以使用我们的 CLI https://docs.sentry.io/cli/或 Webpack 插件https://github.com/getsentry/sentry-webpack-plugin
这是源地图上的一些旧文档,但新 SDK https://docs.sentry.io/clients/node/sourcemaps/的概念是相同的(它都以相同的方式适用于您当前的问题)。
还有一个现有的集成,您可以使用它来重写每一帧中的路径https://github.com/getsentry/sentry-javascript/blob/master/packages/core/src/integrations/pluggable/rewriteframes.ts
例如:
Sentry.init({
dsn: "https://[email protected]/297378",
integrations: [new Sentry.Integrations.RewriteFrames()]
});
将/something/local/src/app.js
更改app:///app.js
( app:///
是我们的内部前缀),因此当您将app.js
上传到您的哨兵发布工件时,它将被正确读取而无需需要获取外部文件。
基本上你需要做的是:
init
调用中设置release
希望它能为你清除一些东西。 如果您需要更多帮助,请随时提出任何问题。
嗨@kamilogorek
感谢您的详细回答。
我做对了吗:在 Sentry 中显示 Node.js 应用程序的堆栈跟踪的常用方法是通过 RewriteFrames 集成或手动上传每个版本的文件? 如果是这样,为什么会显示captureException
/catch-all 上的堆栈跟踪并且没有触发“找不到源代码”错误。
我测试了在node_modules
库中抛出错误的工作原理。 错误会被正确报告,包括来自 lib 的源代码。 见https://sentry.io/share/issue/2b95ecb13ce24227b2184b2561e4f6e3/
那么为什么这对captureException
而对captureEvent
失败?
@guischdi你能过去两个事件的完整链接吗? 不能分享的吗? 我可以通过管理员权限访问它们。
另外,我将在接下来的 3 周内不在办公室,所以当我回来时,我会尝试回到这个。
@kamilogorek你的意思是我也需要为每个版本上传整个node_modules
文件夹吗? 为什么在服务器上运行时@sentry/node
并且所有这些资源都可用,但无法上传所需的文件并报告错误?
我确认在设置框架集成并基本上上传整个node_modules
解决了这个问题。 但是上传这么多 node_modules 文件的过程非常缓慢。
我相信解决方案是:
.tar
.js
和.map
并仅部署和上传这两个文件。另外,我在引用不在node_modules
npm 包中的原始.ts
文件的源映射时遇到问题 - https://github.com/prisma/graphql-middleware/issues/159
@kamilogorek关于这个问题的任何消息?
我还可以确认重写框架是我们的解决方案。
我们的情况有点不同,我们试图让 sourcemaps 工作,但缩小的文件始终是 Sentry 使用的文件。 对于相应的版本,我们正在上传缩小文件以及相关的源地图。 Sentry 似乎没有找到源图,并且默认为缩小文件(尽管它仍然托管在与源图相同的路径中)。
我们刚刚将new Integrations.RewriteFrames()
添加到 Sentry 初始化的集成键中,并且开始为每个新问题获取源映射。
很高兴知道, RewriteFrames
集成和上传node_modules
似乎可以解决问题。 但首先(正如@mieszko4已经提到的),上传这么多文件很烦人。 此外,我最初的发现是,
显示
captureException
/catch-all 上的堆栈跟踪,并且没有触发“未找到源代码”错误
因此,以下问题仍然悬而未决:
那么为什么这对
captureException
而对captureEvent
失败?
或者更准确地说:可以简单地通过captureException
捕获错误而不会出现问题,但是通过captureEvent
捕获需要上传所有文件( RewriteFrames
集成或手动)以防止“找不到源代码”-错误。 这是一个错误还是有意的,@kamilogorek?
@guischdi对这么晚的回复感到抱歉。 我有点失去了踪迹。 你能刷新我的记忆这里发生了什么并提供一些示例事件吗?
@guischdi只是为了确认,这是原始节点 js 文件,对吗? 没有 webpack,没有编译,没有源映射。 只有一个index.js
文件在不同的线路上有 2 个不同的调用? 如果可能的话,你能提供这个文件的内容吗?
@kamilogorek
是的,原始的nodeJS。 看看我上面链接的第二个问题。 您已经在那里看到了index.js
所有 13 行。
@guischdi我们正在调查它为什么会这样(具有相同 url 的 2 个连续帧会触发此行为)。 同时,您可以在项目设置中关闭“启用 JavaScript Source Fetching”,例如。 https://sentry.io/settings/kamil-ogorek/projects/testing-project/
它是节点应用程序,所以这样做没有意义。
@kamilogorek好的,我关闭了“启用 JavaScript 源提取”设置并触发了另一个错误。 但仍然是1 error encountered while processing this event: [...] Source code was not found
(请参阅本期)
奇怪,这对我来说很好。 无论如何,我们将尝试调查为什么会发生这种情况,尽管我不能保证它何时发生,因为这不是阻止任何工作的主要问题。 会及时向大家发布!
@kamilogorek有这方面的消息吗?
对我来说,问题视图报告源代码缺少一些文件,但它们都存在并且可以在堆栈跟踪下查看。
我正在运行 Sentry 自托管并使用@sentry/node 5.4.3
这是我的代码:
// file: <path>/code/cli
const Sentry = require('@sentry/node');
Sentry.init({ dsn: process.env.SENTRY_DSN });
function test () {
throw new Error('test');
}
test();
我也收到此错误:
这是堆栈:
Error: test
File "<path>/code/cli", line 10, col 9, in test
throw new Error('test');
File "<path>/code/cli", line 13, col 1, in Object.<anonymous>
test();
File "internal/modules/cjs/loader.js", line 1063, col 30, in Module._compile
File "internal/modules/cjs/loader.js", line 1103, col 10, in Module._extensions..js
File "internal/modules/cjs/loader.js", line 914, col 32, in Module.load
File "internal/modules/cjs/loader.js", line 822, col 14, in Module._load
File "internal/modules/cjs/loader.js", line 1143, col 12, in Module.runMain
File "internal/main/run_main_module.js", line 16, col 11, in null.<anonymous>
我也遇到Source code was not found
这个问题
@LukeXF你能提供一个受影响事件的链接吗?
即使您收到“找不到源代码”错误,您也可以看到源上下文(即相关行上方和下方的代码)的原因是在 SDK 中,在我们发送事件之前,我们将此信息记录为处理堆栈跟踪的一部分。 错误来自服务器_也_试图填写该信息。
不过,这对我们来说是一个错误,因为我们实际上并不希望您在每个版本中都上传node_modules
(对于节点应用程序;对于浏览器应用程序,您可能无论如何都会捆绑/缩小)。 应该由 https://github.com/getsentry/sentry/pull/17538 修复,它将在几个小时内部署。
一旦修复成功,任何在这里发表评论的人都可以告诉我们您是否仍有问题/问题,以及它们是什么? 如果需要,很高兴重新打开它。
嗨@lobsterkatie
再次测试它,使用以下代码段(从 npm 上的当前 README 中删除):
const Sentry = require('@sentry/node');
Sentry.init({ dsn: process.env.DSN });
(async () => {
Sentry.captureException(new Error('Good bye'));
})();
不幸的是,我们仍然在https://sentry.io/share/issue/0247fe07741c4e358089461f113cef42/上收到Source code was not found
错误
您昨天介绍的修复程序是否已经部署?
还使用当前 v4.xx 版本 (v4.6.6) 和 @sentry/node 的最新版本 (v5.14.0) 进行了测试。
@guischdi您没有上传任何工件,也没有在您的配置中包含发布。
请先关注文档: https :
@kamilogorek
在 SDK 中,在我们发送事件之前,我们会将此信息记录为处理堆栈跟踪的一部分。 该错误来自服务器也试图填写该信息。
不过,这对我们来说是一个错误,因为我们实际上并不希望您在每个版本中都上传 node_modules
如果我当时理解
我认为剩下的唯一问题是尽管正确提供了上下文,但仍显示错误。 服务器似乎没有认识到它不需要我这边的额外上传。 (我说对了吗
@guischdi它正在寻找的文件来自您的应用程序,而不是来自 node_modules,因此我所做的更改(为了更成功地排除第 3 方代码)不适用于此处。
我们尝试为节点应用程序处理源映射的原因是,虽然代码很可能没有被缩小,但它可以很容易地被转译(例如,如果它是用打字稿编写的),所以我们需要源映射以显示编写的代码而不是 babel 的输出。
好的,所以这对我来说看起来像是一个 UX 错误。 在我看来,它应该(至少对于 Node.js 项目)只是一个警告,它不能说Source code was not found
而是像Source maps were not found
。 这样可以防止出现超过一年历史的问题;)
如果您愿意,您可以将此问题作为报告重新提交给在前端/显示部分工作的任何人,或者将其关闭并向他们报告此误解。 非常感谢您终于澄清了这一点!
最有用的评论
好的,所以这对我来说看起来像是一个 UX 错误。 在我看来,它应该(至少对于 Node.js 项目)只是一个警告,它不能说
Source code was not found
而是像Source maps were not found
。 这样可以防止出现超过一年历史的问题;)如果您愿意,您可以将此问题作为报告重新提交给在前端/显示部分工作的任何人,或者将其关闭并向他们报告此误解。 非常感谢您终于澄清了这一点!