Datadog logs与RUM SDK同时启用时异常触发重复上报问题
Datadog浏览器SDK异常重复上报问题修复方案
问题描述
触发条件
页面抛出未捕获异常时,Datadog logs SDK会发送请求上报该事件。
预期结果
每个异常事件仅发送1次请求,Datadog UI中对应事件仅记录1次。
实际结果
每个异常事件触发Datadog logs SDK发送1000-2500次请求,Datadog UI中该事件被重复记录多次。
补充信息
- 禁用Datadog RUM SDK后,logs SDK运行符合预期,但需要同时运行两款SDK,因此该方案暂不可行
- 使用的
@datadog/browser-logs和@datadog/browser-rum包版本均为3.1.3 - 问题复现示例截图:

现有初始化代码
import { datadogLogs } from '@datadog/browser-logs'; import { datadogRum } from '@datadog/browser-rum'; if (process.env.NODE_ENV === 'production' && process.env.DATADOG_CLIENT_TOKEN) { const environment = getEnvironment(); const config = { site: 'datadoghq.eu', clientToken: process.env.DATADOG_CLIENT_TOKEN, service: typeof DATADOG_SERVICE !== 'undefined' ? DATADOG_SERVICE : undefined, env: environment ? `${environment}` : undefined, proxyHost: process.env.PROXY_HOST }; datadogLogs.init(config); if (process.env.DATADOG_APPLICATION_ID) { datadogRum.init({ ...config, trackInteractions: true, applicationId: process.env.DATADOG_APPLICATION_ID }); datadogRum.setUser({ name: service.getName(), email: service.getEmail() }); } }
根因说明
该问题为Datadog 3.x版本浏览器SDK的已知兼容缺陷:Logs SDK和RUM SDK同时启用时,会重复绑定全局异常监听回调,形成上报循环。未捕获异常被Logs SDK捕获上报后,上报请求的链路事件又会被RUM SDK捕获,反向触发Logs SDK的二次上报,最终循环产生上千次重复请求。
解决方案
方案1:版本升级(推荐)
将@datadog/browser-logs和@datadog/browser-rum同时升级到v4.0.0及以上版本,官方已在该版本修复了两款SDK的事件联动重复上报问题,升级后无需修改现有初始化配置即可恢复正常。
方案2:临时兼容配置(无法升级版本时使用)
在Logs SDK初始化配置中新增forwardErrorsToLogs: false参数,关闭RUM SDK向Logs SDK的异常自动转发,即可打断上报循环:
// 修改logs初始化部分代码即可 datadogLogs.init({ ...config, forwardErrorsToLogs: false })
配置修改完成后,单个未捕获异常仅会触发一次上报,符合预期效果。
内容的提问来源于stack exchange,提问作者Radu Alexandru
相关产品推荐
相关产品推荐

