首页 > 解决方案 > Sentry:beforeSend 被调用多次

问题描述

我有一个带有 redux 的 react-native 应用程序。当 Sentry 记录错误时,我想获取带有数据的 PUT 请求。我是 Sentry 的新手,我在 App.js 中使用它:

Sentry.init({
  dsn: ...,
  enableInExpoDevelopment: true,
  debug: true,

  beforeSend(event) {
try {
  fetchMyData(data)
  Sentry.withScope(function(scope) {
    Sentry.captureMessage('Error');
  });
  return event;
}
catch (e) { 
  return e;
}
  },
});

它可以工作并且请求成功的时间最多,但是 beforeSend 被多次调用,并且在 Sentry 中的事件循环:Put Request -> captureMessage -> Put Request -> captureMessage... 等等。

当 Sentry 登录时,还有另一种方法可以调用该方法吗?数据仅在调用 beforeSend 时定义。为什么会有这个循环?

谢谢!

标签: typescriptreact-nativereduxsentry

解决方案


我认为这就是你想要的:


Sentry.init({
  dsn: 'http://bla.com/12',
  debug: true,
  beforeSend(event) {
    try {
      // fetchMyData(data)
      // Sentry.withScope(function(scope) {
      //   Sentry.captureMessage('Error');
      // });
      const client = new Sentry.ReactNativeClient({dsn: 'http://bla.com/12'});
      client.captureMessage('test');
      return event;
    }
    catch (e) { 
      return e;
    }
  },
});

您需要创建一个新Client的来发送这些事件beforeSend。如果您调用Sentry.captureMessagebeforeSend如果您不检查特定事件,则会创建一个无限循环。


推荐阅读