Skip to main content

插件配置

Web SDK 通过 plugin 配置管理各类采集能力的开启状态和具体行为。常见写法是:

  • true:开启该插件,使用 SDK 内部默认行为;
  • false:关闭该插件;
  • object:开启该插件,并传入该插件的子配置。
import Aegis from 'bugly-web-sdk';

// 仅用于 API 监控 ignoreUrls 排除 SDK 自身上报请求,不需要作为 hostUrl.url 传入。
const BUGLY_PRO_REPORT_URL = 'https://pro.bugly.qq.com/collect/aegisV2Web';

const aegis = new Aegis({
id: '<bugly-app-id>',
appKey: '<bugly-app-key>',
buglyType: 'pro',
plugin: {
spa: true,
error: true,
assetSpeed: true,
pagePerformance: true,
webVitals: true,
session: true,
blankScreen: true,
api: {
apiDetail: false,
reportWhenError: true,
ignoreUrls: [BUGLY_PRO_REPORT_URL],
},
},
});

buglyType: 'pro' 会让 SDK 使用专业版内置上报地址 https://pro.bugly.qq.com/collect/aegisV2Web 和白名单/远程采样配置地址 https://pro.bugly.qq.com/webconfig/v_web/config。插件配置页中的 BUGLY_PRO_REPORT_URL 仅用于 ignoreUrls 排除 SDK 自身上报请求;一般用户不需要配置 hostUrl。

Web 插件配置​

{
plugin: {
aid?: boolean | PluginConfigOption;
pv?: boolean | PluginConfigOption;
spa?: boolean | PluginConfigOption | { onRouterChange: () => Record<string, any> };
error?: boolean | PluginConfigOption;
api?: boolean | ApiPluginConfig;
assetSpeed?: boolean | PluginConfigOption;
pagePerformance?: boolean | PluginConfigOption;
webVitals?: boolean | PluginConfigOption;
session?: boolean | CoreSessionConfig;
blankScreen?: boolean | PluginConfigOption;
device?: boolean | PluginConfigOption;
close?: boolean | PluginConfigOption;
}
}
插件项说明
aidAegis SDK 为用户设备分配的唯一标识,通常用于区分用户、计算 UV 等
pv页面访问上报
spa单页应用路由变化上报,可通过 onRouterChange 自定义路由变化时的附加信息
errorJS 执行错误、Promise 错误、资源加载失败等错误采集
apiAPI 请求监控,拦截浏览器 fetch 与 XMLHttpRequest
assetSpeed静态资源加载性能采集
pagePerformance页面加载性能采集,可配合 urlHandler 修正页面 URL
webVitalsWeb Vitals 指标采集
session会话/用户行为相关数据采集
blankScreen白屏检测
device设备信息采集
close页面关闭相关上报

aid​

Aegis SDK 会为每个用户设备分配唯一标识。该标识通常存储在浏览器本地存储中,用于区分用户、计算 UV 等。如果业务需要自行传入设备标识,可在初始化配置或 setConfig 中传入 aid。

const aegis = new Aegis({
id: '<bugly-app-id>',
appKey: '<bugly-app-key>',
aid: '<device-id>',
});

// 或在设备标识生成后更新
aegis.setConfig({
aid: '<device-id>',
});

pagePerformance​

pagePerformance 用于采集页面加载性能。对于包含动态路由、Hash 路由或自定义页面 URL 的应用,可通过全局 urlHandler 或插件子配置中的 urlHandler 统一页面 URL 口径。

new Aegis({
id: '<bugly-app-id>',
appKey: '<bugly-app-key>',
pageUrl: window.location.href,
urlHandler: () => window.location.pathname,
plugin: {
pagePerformance: true,
},
});

session​

session 用于会话相关数据采集。对于 SPA 框架,可结合业务路由、用户行为和应用可见性变化配置会话采集策略。若业务对用户行为采集有合规要求,请在开启前确认采集范围和隐私告知。

new Aegis({
id: '<bugly-app-id>',
appKey: '<bugly-app-key>',
plugin: {
session: {
actionTypes: true,
},
},
});

API 配置​

api 插件用于监控浏览器中的 fetch 和 XMLHttpRequest 请求。配置类型包含以下常用字段:

type ApiPluginConfig = {
apiDetail?: boolean;
reportAbort?: boolean;
reportWhenError?: boolean;
resourceTypeHandler?: Function;
retCodeHandler?: Function;
reqParamHandler?: Function;
resBodyHandler?: Function;
reqHeaders?: Array<string>;
resHeaders?: Array<string>;
isSSE?: Function;
isFirstSSEChunk?: Function;
urlHandler?: (url: string, payload?: any) => string;
reportUrls?: Array<string | RegExp>;
ignoreUrls?: Array<string | RegExp>;
apiDetailReportUrls?: Array<string | RegExp>;
apiDetailIgnoreUrls?: Array<string | RegExp>;
injectTraceHeader?: 'traceparent' | 'sw8' | 'b3' | 'sentry-trace';
injectTraceUrls?: Array<string | RegExp>;
injectTraceIgnoreUrls?: Array<string | RegExp>;
};
配置项类型说明
apiboolean \| object设为 true 或对象时开启 API 监控,设为 false 时关闭
apiDetailboolean是否采集请求参数、响应内容等详情
reportAbortboolean是否上报被 abort 的请求
reportWhenErrorboolean是否在接口异常时上报错误数据;SDK 源码中该项默认按 true 处理
retCodeHandlerFunction(data, url, ctx): { isErr: boolean, code: string }自定义业务返回码判断逻辑
reqParamHandlerFunction(data, url)上报前处理请求参数,可用于脱敏或裁剪
resBodyHandlerFunction(data, url, ctx)上报前处理响应内容,可用于脱敏或裁剪
reqHeadersArray<string>指定需要上报的请求头字段列表
resHeadersArray<string>指定需要上报的响应头字段列表;非 simple header 需后端返回 Access-Control-Expose-Headers
resourceTypeHandlerFunction(url)自定义请求资源类型判断逻辑
urlHandlerFunction(url, payload): string自定义最终上报的请求 URL
reportUrlsArray<string \| RegExp>仅收集匹配规则的 API 日志
ignoreUrlsArray<string \| RegExp>忽略匹配规则的 API 日志,建议加入 SDK 上报地址避免自上报干扰
apiDetailReportUrlsArray<string \| RegExp>仅对匹配规则的请求采集详情
apiDetailIgnoreUrlsArray<string \| RegExp>对匹配规则的请求不采集详情
injectTraceHeader'traceparent' \| 'sw8' \| 'b3' \| 'sentry-trace'开启后,SDK 会在匹配请求中注入对应 trace header
injectTraceUrlsArray<string \| RegExp>指定需要注入 trace header 的 URL
injectTraceIgnoreUrlsArray<string \| RegExp>指定不需要注入 trace header 的 URL
isSSE / isFirstSSEChunkFunction用于 SSE 场景的请求识别和首包判断
敏感信息提醒

apiDetail: true 会采集请求/响应详情。若接口中包含密码、token、手机号、身份证号、内部密钥等敏感字段,必须通过 reqParamHandler、resBodyHandler、apiDetailReportUrls、apiDetailIgnoreUrls 等配置做脱敏、裁剪或范围控制后再开启。

返回码处理示例​

假设业务接口返回结构如下:

{
"code": 0,
"message": "ok",
"data": {}
}

可以通过 retCodeHandler 自定义业务错误判断:

new Aegis({
id: '<bugly-app-id>',
appKey: '<bugly-app-key>',
plugin: {
api: {
retCodeHandler(data) {
try {
if (typeof data === 'string') data = JSON.parse(data);
} catch (e) {
return { isErr: true, code: 'parse_error' };
}

return {
isErr: data.code !== 0,
code: String(data.code),
};
},
},
},
});

脱敏示例​

new Aegis({
id: '<bugly-app-id>',
appKey: '<bugly-app-key>',
plugin: {
api: {
apiDetail: true,
reqParamHandler: (body, url) => {
const text = typeof body === 'string' ? body : JSON.stringify(body);
return text.replace(/"token":"[^"]+"/g, '"token":"***"');
},
resBodyHandler: (body, url) => {
try {
const data = JSON.parse(body);
delete data.secret;
delete data.password;
return JSON.stringify(data);
} catch (e) {
return body;
}
},
},
},
});