Sentry-javascript: 禁用开发

创建于 2013-05-03  ·  19评论  ·  资料来源: getsentry/sentry-javascript

在将 Raven 包含为 AMD 依赖项后,我无法弄清楚如何恢复window.onerror事件。

我不想在开发过程中使用 Raven,所以我只在生产模式下调用config() / install() 。 但是在开发模式下,所有错误仍然被TraceKit.report()抛出......这非常令人沮丧,因为文件/行号/堆栈跟踪在浏览器开发工具中不再有帮助。

我试过在开发模式下调用uninstall()但这没有帮助。 你是否有理由绑定到window.onerror ,而不是在config()install()中执行它?

最有用的评论

对于那些来这里试图弄清楚的人来说,这是我一开始错过的配置选项shouldSendCallback

import Raven from 'raven-js';

const env = 'prod';
const release = '12345';

Raven
  .config('https://<example>@sentry.io/1234', {
    environment: env,
    release: release,
    shouldSendCallback: () => {
      // Do your logic here...
      return ['prod', 'staging'].indexOf(env) !== -1;
    },
  })
  .install();

如果shouldSendCallbackfalse哨兵将不会报告。 有了这个👍,您的代码中无需条件报告逻辑。

所有19条评论

找到了解决方案,但并不理想...

我试图在开发模式下手动设置window.onerror = null ,但即使这样也没有用。 问题是我在几个模块中使用了require() ,并且每次 Raven 都重新绑定到window.onerror

因此,我停止使用noConflict() ,将其作为全局依赖项包含在 requirejs 配置中,并将其作为本地依赖项从其他模块中删除。 这允许设置window.onerror = null而无需 Raven 稍后重新绑定事件。

相当混乱的修复虽然:(

@adambiggs另一个解决方案是为 Raven-js 创建一个包装 AMD 模块,该模块执行配置和安装调用,这意味着您只能导入 raven-js 一次,但可以多次导入您自己的模块,afaik。

我认为这可能与: https ://github.com/getsentry/raven-js/pull/109 和https://github.com/getsentry/raven-js/issues/91#issuecomment -15560074 有关

这应该不再相关。 window.onerror在调用install()之前不会发生突变,并在调用uninstall()时恢复。 让我知道是否还有其他问题。

@mattrobenolt ,我已经升级到 1.1.11 并且我没有调用install()并且我仍然会遇到 raven 处理错误。

@bobbyrenwick你能把我链接到显示这种情况的公开内容吗?

有解决方法吗? 即使我从不调用Raven.config()Raven.install()或者如果我调用Raven.config(false) ,jquery 或 onerror 处理程序似乎仍然被安装。 唯一的解决方法似乎是从不加载 raven js(这不太理想)。

见:#282 :)

您是否仅提供 #282 作为背景? 我在那里看不到任何解决方法。

是的,因为还没有解决方案。

我唯一的解决方法是在if块中使用require() (我的其余代码现在使用import :(

有这方面的更新吗?

任何更新? 它仍然无法正常工作。

编辑:对不起我的语气。 度过了漫长的一天。

你想做什么? 我正在这样做,效果很好:

if (process.env.RAVEN_DSN) {
  require('raven-js').config(process.env.RAVEN_DSN, {
    environment: process.env.NODE_ENV,
  }).install();
}

其中process.env.RAVEN_DSN当然是 DSN,并且仅在构建我希望 Raven 运行的环境时通过webpack.EnvironmentPlugin设置。

在您的版本中,不可能有条件地设置 Angular ErrorHandler。 要么你在每种情况下都设置它,然后无论如何它都会吞下你的错误,或者不要但仍然在提供程序中列出它,这 od dev 会导致整个模块崩溃。

据我所知,不可能根据条件使用或不使用 Angular 提供程序。

我今天做了很多次修复尝试。

老实说,这听起来像是一个 Angular 问题,而不是 Raven 问题。

话虽如此,我同意一个更通用的解决方案将是一个很好的补充。

只是一个想法:您是否尝试过在ignoreUrls选项中设置一个匹配所有 URL 的模式? 那会做你需要的吗? 像ignoreUrls: [/./]这样的东西?

或者也许将sampleRate设置为零?

可以阻止 Raven 发送请求甚至捕获错误,但这并不能阻止 Angular ErrorHandler 吞下错误(= 至少会丢失引发错误的实际行的跟踪)。

我想你是对的,毕竟这不是 Raven 的问题。

对于那些来这里试图弄清楚的人来说,这是我一开始错过的配置选项shouldSendCallback

import Raven from 'raven-js';

const env = 'prod';
const release = '12345';

Raven
  .config('https://<example>@sentry.io/1234', {
    environment: env,
    release: release,
    shouldSendCallback: () => {
      // Do your logic here...
      return ['prod', 'staging'].indexOf(env) !== -1;
    },
  })
  .install();

如果shouldSendCallbackfalse哨兵将不会报告。 有了这个👍,您的代码中无需条件报告逻辑。

将您的 DSN 设为空字符串。 它将禁用报告

我用过这种方式。 它似乎对我有用

if (environment.production) { Raven.config('https://@sentry.io/') .install(); }

在提供者中
providers: [environment.production ? { provide: ErrorHandler, useClass: RavenErrorHandler } : [], ...

如果我在这里做错了什么,请告诉我。

此页面是否有帮助?
0 / 5 - 0 等级