You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中如何在Sentry彻底忽略TypeError: Network request failed错误

问题背景

我在React Native项目中使用Sentry捕获错误,多数网络相关错误格式如下:

7/4/2025, 12:51:09 am | ERROR : `your text`
{
  "status": "FETCH_ERROR",
  "error": "TypeError: Network request failed"
}

我尝试在Sentry初始化时添加配置忽略该错误:

Sentry.init({
  dsn: 'your-dsn-here',
  ignoreErrors: ["TypeError: Network request failed"],
  // other config
});

但添加后仍能在Sentry日志中看到该错误。另外我使用react-native-logs包将已处理错误上报到Sentry的方式为:

try {
  // Some API call or async logic
} catch (error) {
  LOG.error(error, 'MyScreen');
}

疑问

  1. 为何TypeError: Network request failed加入ignoreErrors后,Sentry仍会记录该错误?
  2. 如何彻底忽略该错误——无论它是已处理还是未处理状态?

解决方案

问题1的原因

  • ignoreErrors仅作用于未处理全局错误:Sentry的ignoreErrors配置只对未被try/catch捕获的全局错误生效。你代码中的网络错误是被try/catch捕获后,通过LOG.error主动上报的,这类已处理错误不会被ignoreErrors过滤。
  • 字符串匹配精度问题:如果实际上报的错误对象结构与你填写的字符串不完全一致(比如错误消息有额外空格、错误是Error实例而非纯字符串),ignoreErrors的字符串匹配会失效。

问题2的彻底忽略方案

要同时覆盖未处理全局错误和主动上报的已处理错误,需要结合两种拦截方式:

1. 配置Sentry全局过滤规则(处理未处理错误)

保留ignoreErrors的同时,改用正则匹配提升容错性,并添加beforeSend钩子精准过滤错误对象:

Sentry.init({
  dsn: 'your-dsn-here',
  ignoreErrors: [/TypeError: Network request failed/], // 用正则替代字符串,兼容格式差异
  beforeSend(event, hint) {
    const error = hint.originalException;
    // 检查错误消息是否包含目标内容
    if (error?.message?.includes('TypeError: Network request failed')) {
      return null; // 返回null会阻止错误上报
    }
    return event;
  },
  // other config
});

2. 拦截react-native-logs的上报逻辑(处理已处理错误)

因为你通过LOG.error主动上报已处理错误,需要在日志工具层面过滤目标错误:

  • 若react-native-logs配置了Sentry传输器,直接在传输器中添加过滤逻辑:
import { logger } from 'react-native-logs';
import * as Sentry from '@sentry/react-native';

const LOG = logger.createLogger({
  transports: [
    {
      transport: (props) => {
        // 过滤目标错误,不执行上报
        if (props.msg?.message?.includes('TypeError: Network request failed') || 
            props.msg?.includes('TypeError: Network request failed')) {
          return;
        }
        // 正常上报其他错误
        Sentry.captureException(props.msg);
      },
    },
  ],
});
  • 或者在catch块中直接判断,避免调用LOG.error:
try {
  // Some API call or async logic
} catch (error) {
  // 仅上报非目标错误
  if (!error?.message?.includes('TypeError: Network request failed')) {
    LOG.error(error, 'MyScreen');
  }
}

验证方式

配置完成后,可通过模拟网络错误(如断开网络调用API)测试:

  • 未被try/catch捕获的网络错误:不会出现在Sentry
  • 被try/catch捕获后调用LOG.error的错误:也不会出现在Sentry

内容的提问来源于stack exchange,提问作者M Chanikya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 11:41:11