【问题标题】:Sentry: beforeSend is called mutliple timesSentry:多次调用 beforeSend
【发布时间】:2020-05-31 15:45:28
【问题描述】:

我有一个带有 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 时定义。为什么会有这个循环?

谢谢!

【问题讨论】:

    标签: typescript react-native redux sentry


    【解决方案1】:

    我想这就是你想要的:

    
    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 发送这些事件。如果您在 beforeSend 中调用 Sentry.captureMessage,如果您不检查特定事件,则会创建一个无限循环。

    【讨论】:

    • 谢谢,这似乎是我的回答。是否可以将我的 fetchMyData 与 Sentry 错误结合起来。因此,每次 Sentry 记录错误时,都会调用一次该函数。如果可能的话,我可以在您的示例中在哪里调用此函数?谢谢!!!
    • 当我使用新客户端时,Sentry 中的错误日志并没有完整的信息。也许我在获取错误记录数据的任务中使用了错误的方法。但是我的旧方法做了正确的事情:获取错误数据并记录我的消息以及一组和附加上下文(在我的示例中未显示)...
    • 抱歉,我不完全理解您想要达到的目标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 2013-01-13
    • 2013-04-09
    • 2014-03-21
    • 2018-10-19
    相关资源
    最近更新 更多