产品动态
/collect?)前执行,例如:const aegis = new Aegis({id: 'pGUVFTCZyewxxxxx',beforeReport(log) {// 监听到下面抛出的错误console.log(log); // {level: "4", msg: "发生错误啦!!!!"}return log;}});throw new Error('发生错误啦!!!!');
log 将会有以下几个字段: level: 日志等级,例如:当 level 为 '4' 时代表错误日志; { level: '1', name: '接口请求日志(白名单日志)' }{ level: '2', name: '一般日志' }{ level: '4', name: 'JS 执行错误' }{ level: '8', name: 'Promise 错误' }{ level: '16', name: 'Ajax 请求异常' }{ level: '32', name: 'JS 加载异常' }{ level: '64', name: '图片加载异常' }{ level: '128', name: 'css 加载异常' }{ level: '256', name: 'console.error (未启用)' }{ level: '512', name: '音视频资源异常' }{ level: '1024', name: 'retcode 异常' }{ level: '2048', name: 'aegis report' false 时,本条日志将不会进行上报,该功能可用来过滤某些不需要上报的错误,例如:const aegis = new Aegis({id: 'pGUVFTCZyewxxxxx',beforeReport(log) {if (log.level === '4' && log.msg && log.msg.indexOf('碍眼的错误') !== -1) {return false}}});throw new Error('碍眼的错误'); // 该错误将不会被上报
碍眼的错误 几个关键字时,将不会上报至 RUM 后台中。beforeReport 钩子,唯一不同点在于,该钩子接收到的所有参数都是已经上报完成的日志,而 beforeReport 钩子接收的参数是即将上报的日志。const aegis = new Aegis({id: 'pGUVFTCZyewxxxxx',reportApiSpeed: true,reportAssetSpeed: true,beforeReportSpeed(msg) {console.log(msg); // {url: "https://localhost:3001/example.e31bb0bc.js", method: "get", duration: 7.4, status: 200, type: "static"}return msg}});
msg 将会有以下几个字段: url: 该资源的请求地址。type: 该资源的类型,目前有 fetch 、 static 两种,当为 fetch 时,Aegis 将会把该资源当成 API 请求进行上报,static 时则视为静态资源。duration: 该资源请求耗时。method: 请求该资源时使用的 http method。status: 服务器返回状态码。msg)作为参数调用 beforeReportSpeed 钩子。const aegis = new Aegis({id: 'pGUVFTCZyewxxxxx',reportApiSpeed: true,reportAssetSpeed: true,beforeReportSpeed(msg) {msg.type = 'static';}});
msg.type 设置为 static,这意味着所有的资源都将被当成静态资源进行上报,API 请求也将被报至静态资源中。https://example.com/api,该接口的响应头 Content-Type 为 text/html。正常情况下,RUM 会将该资源当成静态资源进行上报。但在您的业务中,该接口就必须视为 API 请求进行上报,您可以给 Aegis 配置如下钩子进行校正:const aegis = new Aegis({id: 'pGUVFTCZyewxxxxx',reportApiSpeed: true,reportAssetSpeed: true,beforeReportSpeed(msg) {if (msg.url === 'https://example.com/api') {msg.type = 'fetch';}}});
const aegis = new Aegis({id: 'pGUVFTCZyewxxxxx',reportApiSpeed: true,reportAssetSpeed: true,beforeReportSpeed(msg) {// 地址中包含‘https://example.com/api’的都不上报if (msg.url.indexOf('https://example.com/api') !== -1) {// 返回 ‘false’ 将阻止本条测速日志的上报return false}}});
const aegis = new Aegis({id: 'pGUVFTCZyewxxxxx',beforeRequest: function(msg) {if (msg.logs && msg.logs.level === '4' && msg.logs.msg && msg.logs.msg.indexOf('碍眼的错误') !== -1) {return false}return msg;}});
{name: "白屏时间", duration: 3015.7000000178814, ext1: '', ext2: '', ext3: ''}。{name: "ios", ext1: "", ext2: "", ext3: ""}。{contentDownload: 2, dnsLookup: 0, domParse: 501, firstScreenTiming: 2315, resourceDownload: 260, ssl: 4, tcp: 4, ttfb: 5}。{connectTime: 0, domainLookup: 0, duration: 508.2, isHttps: true, method: "get", status: 200, type: "tatic", url: "https://xxxxxx", urlQuery: "max_age=1296000"}。{delta: 1100, entries: [PerformancePaintTiming], id: "v1-1629344653118-4916457684758", name: "CP", value: 1100}。{msg: "日志详情", level: '4', ext1: '', ext2: '', ext3: '', trace: ''}。{ level: '1', name: '接口请求日志(白名单日志)' }{ level: '2', name: '一般日志' }{ level: '4', name: 'JS 执行错误' }{ level: '8', name: 'Promise 错误' }{ level: '16', name: 'Ajax 请求异常' }{ level: '32', name: 'JS 加载异常' }{ level: '64', name: '图片加载异常' }{ level: '128', name: 'css 加载异常' }{ level: '256', name: 'console.error (未启用)' }{ level: '512', name: '音视频资源异常' }{ level: '1024', name: 'retcode 异常' }{ level: '2048', name: 'aegis report' }const aegis = new Aegis({id: "pGUVFTCZyewxxxxx",afterRequest: function(msg) {// {isErr: false, result: Array(1), logType: "log", logs: Array(4)}console.log(msg);}});
文档反馈