数据上报验证

最近更新时间:2026-01-21 16:21:50

我的收藏

崩溃

崩溃的捕获和收集基于 Electron 官方提供的 crashReporter,进行解析后将崩溃线程的堆栈信息上传至后台。
注意:
Electron 官方提供的 crashReporter 在 Windows 平台上无法捕获由 abort 导致的崩溃。

注意事项

为确保 SDK 能够正常收集崩溃信息,请检查您的应用代码中是否已调用了 crashReporter.start 方法。如果您的应用已经启用该方法,可能会与 SDK 产生冲突,导致崩溃信息收集失效。

崩溃初始化

const aegis = new Aegis({
minidumpBindir: __dirname + "/minidump/bin", //可执行文件的路径,选填
crashFilePath: app.getPath("crashDumps"), // 崩溃文件的存储路径,选填
uploadCrashLog: false, //默认为false,为true时使用自定义上报崩溃过程的具体日志
env: "debug", //uploadCrashLog为true,env为debug时才会使用自定义上报上传崩溃日志
})
minidumpBinDir:Electron 使用 bugly-minidump 编译的可执行文件来获得崩溃堆栈,业务在使用的过程中需要声明这些可执行文件的绝对路径才能使用崩溃功能。
默认使用 ProjectDir/node_modules/bugly-minidump/bin/ 来设置 minidumpBinDir,如果用户在打包时更改这些可执行文件的路径,需要在初始化时设置 minidumpBinDir。

如果用户使用 ESModule 模式,需要在 minidumpBinDir 声明这些可执行文件的路径。如果在应用打包后,将可执行文件打包到 asar 里,会因为 asar 的特性导致无法使用这些可执行文件,需要将这些可执行文件打包到 asar.unpack 里。
用户在接入 SDK 时,可以在主进程的控制台查看 SDK 的日志,确认 SDK 能否找到可执行文件的路径。
// 寻找可执行文件路径失败,filePath为查找可执行文件的路径。可以在SDK初始化时使用minidumpBindir来修改查找可执行文件的路径
[RumPro] [DEBUG] find minidump_stackwalk failed. filePath: /Users/lolouyang/electronTest/built/darwin-arm64/minidump_stackwalk
[RumPro] [DEBUG] find minidump_dump failed. filePath: /Users/lolouyang/electronTest/built/darwin-arm64/minidump_dump
crashFilePath:默认在 app.getPath(crashDumps) 路径下查找崩溃文件并进行解析翻译,如果更改这个路径,需要在 crashFilePath 里声明更改后的路径。
uploadCrashLog:用户在打包应用的过程中可能无法查看 SDK 的日志,可以在 SDK 初始化时设置 uploadCrashLog 为 true,这样可以在产品 日志 中的用户日志/一般日志里查看 SDK 的崩溃功能的日志。


模拟异常

{
"aegisv2_goto":"6a262b8bc85d31f4", // string,定位或追踪ID
"timestamp":1751977565, // number,事件发生时间(毫秒级时间戳)
"crashThread":"崩溃线程堆栈信息", // string,崩溃线程堆栈
"usedModules":"翻译崩溃线程所需模块地址信息", // string,相关模块信息
"js_stack":"崩溃JS堆栈信息" // string,JS层堆栈
"crashProcess": "renderer" // string, 用于标识是渲染进程崩溃还是主进程崩溃
}
1. 上报字段包括崩溃线程堆栈信息和 js 堆栈信息,其中崩溃线程堆栈信息是由 crashReporter 捕获到 minidump 文件,利用 minidump 包解析而来。
2. 崩溃时,由于整个进程已经崩溃,js 堆栈信息无法通过常规方式获取。用户需要使用 SDK 通过 wrapWithStackProxy 对关键 API 进行代理,在每次调用时记录当前 JS 调用栈,并在崩溃前通过 crashReporter.addExtraParameter 将最近一次调用的堆栈信息写入崩溃报告,从而实现在崩溃时也能获取到 JS 层堆栈。
说明:
Electron 官方 minidump 包暂不支持 Windows 平台,我们对其进行了重写并发布为 @tencent/minidump,主进程 SDK 依赖该包以在 Windows 上解析 minidump 文件。

崩溃前 JS 调用栈捕获

由于崩溃时整个进程已终止,无法通过常规方式获取 JS 堆栈。Aegis 通过 wrapWithStackProxy 代理关键 API,在每次调用时记录当前 JS 调用栈,并在崩溃前通过 crashReporter.addExtraParameter 保存最近调用信息。如果用户使用了多个原生 API,需要对多个 API 使用 wrapWithStackProxy。
wrapWithStackProxy 使用说明
import Aegis from 'bugly-electron-main';

// 1. 创建代理对象
const proxyNativeApi = Aegis.wrapWithStackProxy(nativeApi, info => {
console.log('调用:', info.method, '\\n堆栈:\\n', info.stack);
});

// 2. 参数说明
// 第一个参数:需要代理的原生对象或模块
// 第二个参数:回调函数,每次方法调用时触发,接收 info 对象包含:
// - method: 被调用的方法名
// - args: 调用参数数组
// - stack: 当前调用栈字符串

// 3. 使用示例
proxyNativeApi.crash(); // 调用被代理API的方法

警告:
如果原生接口过多或者调用次数过于频繁的话,不建议使用该代理获取 JS 堆栈。要保证 JS 堆栈获取的准确性的话,需要代理所有原生 API。
崩溃上报时机
渲染进程崩溃和子进程崩溃:崩溃发生时即触发崩溃上报。
主进程崩溃:由于主进程崩溃时,整个程序就已经崩溃,因此,主进程崩溃上报的时机是下一次程序启动时。
说明:
如果崩溃上报或解析失败,会立即抛出错误,并且 minidump 文件不会被立即删除,而是会在下一次启动或下一次崩溃上报时进行上报。

检查数据上报

崩溃上报后,可在 崩溃 > 问题列表 查看上报问题。


错误监控

主进程错误监控

Aegis 通过监听 Node.js 主进程的异常事件来实现 JS 错误监控。

监控方式

uncaughtException 事件:监听未被 catch 的 JS 执行错误。
unhandledRejection 事件:监听未被 catch 的 Promise 执行错误。

错误处理流程

当发生错误时,Aegis 会自动执行如下步骤:
1. 格式化错误信息(使用 stringifyPlus)。
2. 收集当前进程的内存和 CPU 使用情况。
3. 将错误信息、性能数据一起上报到后台。

渲染进程错误监控

Aegis 的实例在初始化之后会自动进行以下监控。
JS 执行错误:Aegis 通过监听 window 对象上的 onerror 事件来获取项目中的报错,并且通过解析错误和分析堆栈,将错误信息自动上报到后台服务中。
注意:
如果用户使用的是 Vue 框架,请务必自己获取错误并且主动上报。
Vue.config.errorHandler = function(err, vm, info) {
console.log(`Error: ${err.toString()}\\nStack: ${err.stack}\\nInfo: ${info}`);
aegis.error({
msg: err.toString(),
stack: err.stack,
info: info
});
};
Promise 执行错误:通过监听 unhandledrejection 事件,捕获到未被 catch 的 Promise 错误,为了页面的健壮,建议您 catch 住所有的 Promise 错误。
资源加载失败:页面元素发出的请求如果失败,将会被 window.onerror 事件捕获到(捕获阶段),Aegis 正是通过这个特性监听的资源加载失败。Aegis 监听了以下资源:
<link> 标签请求的 css、font 等。
<script> 标签请求的脚本。
<audio>、<video> 标签请求的多媒体资源。
Ajax(Fetch)请求异常:当用户开启 reportApiSpeed 参数后,Aegis 将会改写 XMLHttpRequest 对象和 fetch 对象,监听每次接口请求,Aegis 认为以下情况是异常情况:
HTTP status 大于等于400。
请求超时、abort、跨域、cancel。
请求结束时 HTTP status 仍然是0,通常发生于请求失败。
注意:
Aegis SDK 在错误发生的时候,不会主动收集接口请求参数和返回信息,如果需要对接口信息进行上报,可以使用 api 参数里面的 apiDetail 进行开启。
new Aegis({
id: '',
//...其他配置
reportApiSpeed: true,
api: {
apiDetail: true,
},
});
retcode 异常:当用户开启 reportApiSpeed 参数后,Aegis 会改写 XMLHttpRequest 对象和 fetch 对象,将获得 API 返回的内容,并尝试在内容中获取到本次请求的 retcode。
retcode 的值会从用户返回的 response body 的第一层(如果第一层取不到,再取第二层)的 code、ret、retcode、errcode 中获取。Aegis 默认 retcode 的值为0是正常的,非0都是异常的。当 retcode 发生异常的时候,会上报一个 retcode 异常的日志。用户可以通过 api.retCodeHandler 对这个值和是否异常进行修正。
注意:
Aegis 实例会进行监控,当您只是引入了 SDK 而没有将其实例化时,Aegis 将什么都不会做。

检查数据上报

错误上报后,可在 错误 > 错误列表 查看上报问题。


API 监控

SDK 通过重写浏览器原生 fetch 与 XMLHttpRequest 对象,在渲染进程内实现对所有网络请求的透明监控。无论业务代码使用 fetch、axios 还是其他基于 XHR 的库,都会被无感知地拦截并上报性能与错误数据。

主进程 API 监控

主进程 SDK 通过 hackHttphackNet 两个钩子,分别拦截 Node.js 原生 http/https 模块和 Electron 的 net 模块发起的请求,监控逻辑和上报内容与渲染进程基本一致,但仅作用于主进程内部发起的网络请求。
钩子
拦截对象
适用场景
hackHttp
require('http') / require('https')
传统 Node.js 网络请求
hackNet
require('electron').net
Electron 专用网络栈
注意:
这两个钩子只能监控主进程自身发起的请求,无法捕获渲染进程(BrowserWindow、WebContents)内部的 fetch 或 XMLHttpRequest。
配置方式与渲染进程相同,请参见 渲染进程 API 监控-配置示例
说明:
主进程 API 监控目前不支持异常捕获上报逻辑,在后续版本中会陆续添加这部分功能。

渲染进程 API 监控

注意事项

仅对渲染进程生效。主进程请使用主进程 SDK。
API 监控配置请参见 API 说明的 API 配置表

重写 fetch

SDK 在初始化阶段调用 hackFetch,将全局 fetch 替换为自定义实现:
请求阶段
在真正发起请求前,SDK 会:
记录请求开始时间戳。
保存请求参数、URL、方法、自定义请求头。
响应阶段
请求完成后(无论成功或失败),SDK 会:
计算耗时。
读取响应状态码、响应头、响应体。
根据 Content-Type 判断是 API 还是静态资源
若开启 apiDetail,则收集请求体与响应体(可自定义过滤函数)。
若状态码 ≥ 400或 retcode 非0,则标记为错误并上报。
异常阶段
网络错误、跨域、超时、手动 abort 等异常同样会被捕获,并补充错误类型与堆栈。

重写 XMLHttpRequest

对于仍使用 XHR 的代码,SDK 通过 hackXHR 以类似逻辑进行拦截:
监听 readystatechange、loadend、error、timeout、abort 事件。
在 send 时记录时间戳,并在 loadend 时统一计算耗时。
支持 SSE(Server-Sent Events)持续上报。
支持配置是否上报 abort 请求。
支持自定义 urlHandler、reqParamHandler、resBodyHandler 等钩子,灵活控制上报内容。

上报内容

字段
说明
url
请求地址(可自定义格式化)
status
HTTP 状态码
method
请求方法
duration
耗时(ms)
ret
业务返回码(取自 retcode / code / ret / errcode)
isErr
是否为业务错误
param
请求参数(可选)
data
响应体(可选)
reqHeaders / resHeaders
指定头信息(可选)
trace / span
链路追踪 ID(可选)
nextHopProtocol
协议类型(h2 / http/1.1 等)

配置示例

new Aegis({
id: 'your-id',
reportApiSpeed: true,
api: {
apiDetail: true, // 上报请求/响应详情
reportAbort: false, // 上报 abort 请求
reqHeaders: ['x-token'], // 指定要上报的请求头
resHeaders: ['content-type'],
retCodeHandler: (data, url) => ({
isErr: data.code !== 0,
code: data.code.toString(),
}),
urlHandler: (url, body) => url.split('?')[0], // 去掉 query
},
});
retCodeHandler
假如后台返回数据如下。
{
body: {
code: '200',
retCode: '0',
data: {
// xxx
}
}
}

业务需要 code 不为 '200',或者 retCode 不为 '0',那么此次请求就是错误的,此时只需进行以下配置。
new Aegis({
// xxx
api: {
retCodeHandler(data) {
// 注意如果这里拿到的data是string类型,需要对象的话,要手动parse下
try {
data = JSON.parse(data)
} catch(e) {}
return {
isErr: data.body.code !== '200' || data.body.retCode !== '0',
code: data.body.code
}
}
}
})
注意:
API 接口请求是否正确是根据 isErr 判断来的,因此 retCodeHandler 的设置非常重要。
返回的 code 需要是 string 类型,否则会上报失败。
自定义过滤函数
当 apiDetail: true 时,SDK 会默认把完整的请求体和完整的响应体上报。如果其中包含敏感字段(如密码、token、手机号等),您可以通过以下两个钩子进行脱敏或裁剪。
钩子
触发时机
参数
返回值
reqParamHandler
上报前处理请求体
(body, url)
处理后的字符串
resBodyHandler
上报前处理响应体
(body, url, ctx)
处理后的字符串
示例1:脱敏手机号。
new Aegis({
id: 'your-id',
reportApiSpeed: true,
api: {
apiDetail: true,
// 1. 请求体脱敏
reqParamHandler: (body, url) => {
if (typeof body !== 'string') body = JSON.stringify(body);
// 把手机号中间四位替换成 ****
return body.replace(/"phone":"(\\d{3})\\d{4}(\\d{4})"/g, '"phone":"$1****$2"');
},
// 2. 响应体脱敏
resBodyHandler: (body, url, ctx) => {
try {
const data = JSON.parse(body);
// 删除敏感字段
delete data.token;
delete data.secret;
return JSON.stringify(data);
} catch {
return body; // 解析失败原样返回
}
},
},
});
示例2:只保留关键字段。
api: {
apiDetail: true,
reqParamHandler: (body, url) => {
if (url.includes('/login')) {
// 登录接口只保留用户名
const { username } = JSON.parse(body);
return JSON.stringify({ username });
}
return body;
},
resBodyHandler: (body, url) => {
if (url.includes('/user/info')) {
// 用户信息接口只保留 id 和 name
const { id, name } = JSON.parse(body);
return JSON.stringify({ id, name });
}
return body;
},
}

检查数据上报

API 上报后,可在 API 页面查看上报问题。


性能监控

主进程性能监控

数据采集机制

采集频率:默认每5分钟采集一次,可通过配置项 processPerformanceInterval 自定义(单位:分钟)。
最小间隔:60秒(60000毫秒)。
数据上报:每次采集后立即上报性能数据。
异常处理:Worker 线程异常时会自动销毁并上报错误信息。

接入方式

const aegis = new Aegis({
id : 'xxxx',
appKey: 'xxxxxxx',
plugin: {
processPerformance: true, // 性能,包括cpu和内存
},
processPerformanceInterval: 2 // 性能数据2min采集上报一次,默认值时5min,如果不设置该值则为五分钟
})

监控指标

系统级指标
sysMemory:系统当前已使用内存总量(单位:KB)。
sysMemoryPercent:系统内存使用率,计算公式:(已使用内存/总内存) × 100(单位:%)。
sysCPUPercent:系统 CPU 当前使用率(单位:%)。
主进程级指标
mainMemory:主进程当前占用的物理内存(RSS)(单位:KB)。
mainMemoryPercent:主进程内存使用率,相对于系统总内存的百分比(单位:%)。
mainCPUPercent:主进程 CPU 使用率(单位:%)。

数据格式示例

{
"sysMemory": 5242880,
"sysMemoryPercent": 65.5,
"sysCPUPercent": 12.3,
"mainMemory": 102400,
"mainMemoryPercent": 1.25,
"mainCPUPercent": 3.4,
"type": "PROCESS_PERFORMANCE"
}

页面性能监控

数据采集机制

触发时机:页面隐藏时自动上报(onHidden 事件)。

接入方式

const aegis = new Aegis({
id : 'xxxx',
appKey: 'xxxxxxx',
plugin: {
webVitals: true,
},
})

监控指标

Web Vitals 核心指标
FCP (First Contentful Paint):首次内容绘制时间,衡量页面首次渲染任何文本、图像、非空白 canvas 或 SVG 的时间(单位:ms)。
LCP (Largest Contentful Paint):最大内容绘制时间,衡量页面最大可见元素加载完成的时间(单位:ms)。
CLS (Cumulative Layout Shift):累积布局偏移,衡量页面视觉稳定性,分数越低表示页面越稳定(单位:无)。
INP (Interaction to Next Paint):交互到下一次绘制时间,衡量页面对用户交互的响应速度(单位:ms)。

数据格式示例

{
"type": "WEB_VITALS",
"msg": "Web Vitals数据上报",
"FCP": 1200,
"LCP": 2500,
"CLS": 0.05,
"INP": 150
}

页面加载监控

数据采集机制

触发时机:页面加载完成后自动计算并上报。
首屏计算:使用 MutationObserver 监听 DOM 变化,结合 PerformanceObserver 监听 paint 事件。
标记元素:支持通过 AEGIS-FIRST-SCREEN-TIMING 属性标记首屏关键元素。
忽略元素:支持通过 AEGIS-IGNORE-FIRST-SCREEN-TIMING 属性忽略特定元素。
重试机制:首屏计算失败时最多重试3次,每次间隔3秒。

接入方式

const aegis = new Aegis({
id : 'xxxx',
appKey: 'xxxxxxx',
plugin: {
pagePerformance: true,
},
})

监控指标

页面加载性能指标
dnsLookup:DNS 解析时间,计算公式:domainLookupEnd - domainLookupStart(单位:ms)。
tcp:TCP 连接建立时间,计算公式:connectEnd - connectStart(单位:ms)。
ssl:SSL 握手时间,计算公式:requestStart - secureConnectionStart(单位:ms)。
ttfb:首字节到达时间,计算公式:responseStart - requestStart(单位:ms)。
contentDownload:内容下载时间,计算公式:responseEnd - responseStart(单位:ms)。
domParse:DOM 解析时间,计算公式:domInteractive - domLoading(单位:ms)。
resourceDownload:资源下载时间,计算公式:loadEventStart - domInteractive(单位:ms)。
firstScreenTiming:首屏渲染时间,通过 MutationObserver 和 PerformanceObserver 计算得出(单位:ms)。
engineInit:浏览器 / 前端框架运行时引擎初始化就绪时间,计算公式:engineReadyTime - navigationStart(单位:ms)。
bundleLoad:核心前端打包资源(Bundle)网络加载完成时间,计算公式:bundleResourceLoadEnd - bundleResourceFetchStart(单位:ms)。
数据来源说明
前7项指标数据来源于 PerformanceTiming 接口。
首屏耗时说明
首屏耗时对应的 DOM 元素可通过打印 aegis.firstScreenInfo 查看。若默认 DOM 元素不能准确代表首屏,可通过以下方式自定义:
标记关键元素:在元素上添加属性 AEGIS-FIRST-SCREEN-TIMING,SDK 会将该元素识别为首屏关键元素,SDK 认为只要用户首屏出现此元素就是首屏完成。
忽略元素:在元素上添加属性 AEGIS-IGNORE-FIRST-SCREEN-TIMING,SDK 会把该 dom 列入黑名单。
说明:
SDK 根据 DOM 变化记录首屏,如果您的 SDK 引入较晚,或者初始化较晚,可能会出现无法获取首屏的情况(即 firstScreenTiming 值为0的情况),如果出现这种情况的话,建议可以试着把 SDK 引入和初始化放在更前面,例如 head 里,然后再观察一下数据。

数据格式示例

{
"type": "PAGE_PERFORMANCE",
"msg": "页面性能数据上报",
"dnsLookup": 50,
"tcp": 120,
"ssl": 80,
"ttfb": 200,
"contentDownload": 800,
"domParse": 300,
"resourceDownload": 500,
"firstScreenTiming": 1800,
"engineInit": 100,
"bundleLoad": 200
}

检查数据上报

性能上报后,可在 性能 页面查看上报问题。


会话追踪

Session 支持功能

支持查看用户在页面的操作时序图。
支持查看用户的操作轨迹。
支持查看页面 action、请求 error 信息。

Session 核心定义


session:一次 session 会话记录的是从 session 开始到终止的整个过程。
session 开始:浏览器第一次打开页面。
session 结束:reload 页面、关闭页面、redirect 非本系统页面,都会主动触发 session 终止。如果 15 分钟页面无操作行为,会主动终止 session。
view:一次 session 可能会包含一个或者多个 view,每次跳转一个页面,都会记录一次 view。上报字段如下:
字段名
类型
描述
is_active
boolean
指示与此事件对应的视图是否被视为活动的
view_url
string
当前页面 view 的 url
view_name
string
与事件对应的视图的可自定义名称
loading_type
string
页面加载的类型:initial_load 或 route_change
referrer
string
上一个网页的 URL,从该网页链接到当前请求的页面
action:每次页面点击操作都会触发一次 action 记录,一次 action 可能会包含多个 resource 记录或者 error 记录。上报字段如下:
字段名
类型
描述
action_type
string
用户操作的类型,目前只支持 Click
action_name
string
用户操作的位置标识
action_target_name
string
用户与之交互的元素,div、p、img 等
resource:页面发起的资源请求记录,包括接口、图片、css、js 等。上报字段如下:
字段名
类型
描述
resource_type
string
正在收集的资源的类型(fetch、xhr、image、font、css 或 js)
method
string
HTTP 方法(例如 POST 或 GET)
resource_url
string
资源地址
link_trace_id
string
设置后台 trace_id,对应 netSpan 的 trace_id,目前仅 fetch、xhr 类型的请求有,通过该字段可以快速直达关联的后端服务状态
link_span_id
string
设置后台 span_id,对应 netSpan 的 span_id,目前仅 fetch、xhr 类型的请求有
resource_status_code
string
响应状态代码
error:捕捉页面的所有错误,包括代码异常、资源请求错误、接口请求错误等信息。上报字段如下:
字段名
类型
描述
code
string
返回码,与 Span 通用字段的返回码相同,上面已经有定义,不需要重复填
error_msg
string
错误消息,与 Span 通用字段的返回码相同,上面已经有定义,不需要重复填
error_source
string
错误源自何处
error_stack
string
有关错误的堆栈跟踪或补充信息

Session 接入

渲染进程中初始化 SDK 时,添加 session:true 即可。
const aegis = new Aegis({
id : 'xxxxx',
appKey: 'xxxx',
plugin: {
// Session functionality
session: true,
});

检查数据上报

会话上报后,可在 会话追踪 > 会话列表 查看上报问题。

通过该页面可以查看页面的时序图和用户的操作轨迹信息。


白屏检测

白屏检测在屏幕上采集多个点,判断这些点是否为空白元素点以及是否为相同元素的点。如果空白元素点的比例以及相同元素的点的比例超过一定阈值后,则认为当前页面为白屏页面。

白屏插件配置

默认可设置为 plugin.blankScreen 为 true 即可。
interface BlankScreenConfig {
/**
* 空白元素选择器,默认为 ['body', 'html', '#app', '#root'],
* 如果有骨架屏,推荐骨架屏的选择器,也放到根节点
* 如果采样点在此范围内,则认为该点为一个空白点
*/
containers?: string[];
/**
* 忽略的容器节点/占位/空白节点元素的配置,避免误检
*/
ignoreContainers?: string[];
/**
* 空白节点比例,比例越大,相对越精准,默认 70%
*/
emptyElementsPercent?: number;
/**
* 相同元素检测比例,比例越大,相对越准确, 默认 70%
*/
sameElementsPercent?: number;
/**
* debounce间隔,防止触发太频繁
*/
debounceDuration?: number;
/**
* 是否关闭相同元素检测功能,默认为 false
*/
disableSameElementsCheck?: boolean;
/**
* DOM 变化需要忽略的元素
*/
ignoreElesWhenDomChange?: string[];
/**
* 复检的时间间隔
*/
reDetectInterval?: number;
};
默认白屏配置:
/**
* 默认白屏插件配置
*/
export const defaultWhiteBlankConfig: Required<BlankScreenConfig> = {
containers: ['body', 'html', '#app', '#root'],
ignoreContainers: [],
emptyElementsPercent: 70,
sameElementsPercent: 70,
debounceDuration: 1500,
disableSameElementsCheck: false,
ignoreElesWhenDomChange: [],
reDetectInterval: 1500,
};

检查数据上报

会话上报后,可在 白屏检测 > 列表 页面查看上报问题。


自定义上报

SDK 提供了丰富的自定义上报接口供用户使用。

自定义日志上报

info、report、error

这三个方法是 SDK 提供的主要的自定义日志上报手段,使用方法如下:
Aegis.info('上报一条日志');
Aegis.error('上报一条错误日志');
Aegis.report('上报一条任意日志');

// 也可以上报下边的日志格式

Aegis.info({
 msg: 'xxx', // 推荐设置,不设置,上报的 message 为空。
[key: string]: any,
});

// 上报错误日志,错误级别为 custom_error
Aegis.error({
 msg: '错误日志信息', // 推荐设置,不设置,上报的 message 为空。
[key: string]: any,
});

// 用户可以自定义report方法的type和level
Aegis.report({
 msg: '这是一个ajax错误日志', // 推荐设置,不设置,上报的 message 为空。
 [key: string]: any,
});
说明:
建议 report 方法使用 Aegis 内部规定的 type 和 level,如果随意上报,会影响筛选。

检查数据上报

自定义日志上报后,可在 日志 页面查看上报问题。


自定义事件上报

reportEvent

该方法可用来上报自定义事件,平台将会自动统计上报事件的各项指标,例如:PV、平台分布等。
reportEvent 可以支持两种上报参数类型,一种是字符串类型。
aegis.reportEvent('XXX请求成功');
一种是对象类型,ext1、ext2、ext3默认使用 new Aegis 的时候传入的参数,自定义事件上报的时候,可以覆盖默认值。
Aegis.reportEvent({
  name: 'XXX请求成功', // 必填
ext1: 'test1',
ext2: 'test2',
ext3: 'test3',
  msg: 'xxx',
[key: string]: any,
})
说明:
自定义事件上报,默认日志类型 {level: "info", type: "custom_event"}。
注意 ext1、ext2、ext3的值请不要上报离散随机值,如耗时、活动 id 等,如需上报请使用 [key: string]: any 的键值对。

检查数据上报

自定义事件上报后,可在 自定义事件 查看上报问题。


自定义测速上报

reportTime

该方法可用来上报自定义测速,例如:
// 假如‘onload’的时间是1s
aegis.reportTime('onload', 1000);
或者如果需要使用额外参数,可以传入对象类型参数,ext1、ext2、ext3会覆盖默认值。
aegis.reportTime({
name: 'onload', // 自定义测速名称
duration: 1000, // 自定义测速耗时(0 - 60000)
ext1: 'test1',
ext2: 'test2',
ext3: 'test3',
[key: string]: any,
});

time、timeEnd

该方法同样可用来上报自定义测速,适用于两个时间点之间时长的计算并上报,例如:
aegis.time('complexOperation');
/**
* .
* .
* 做了很久的复杂操作之后。。。
* .
* .
*/
aegis.timeEnd('complexOperation'); /** 此时日志已经报上去了😄**/
complexOperation 同样可以修改为其他的命名。
自定义测速是用户上报任意值,服务端对其进行统计和计算,因为服务端不能做脏数据处理,因此建议用户在上报端进行统计值限制,防止脏数据对整体产生影响。
目前 Aegis 只支持0 - 60000的数值计算,如果大于该值,建议进行合理改造。
高频率的自定义测速上报尽量使用 reportTime。time 和 timeEnd 上报会存在上报值覆盖的问题。例如 aegis.time(aaa),在调用 aegis.timeEnd(aaa) 之前,又调用了一次 aegis.time(aaa),则上报的时间为 timeEnd 时间 - 第二次 time 的时间。

检查数据上报

自定义测速上报后,可在 自定义测速 页面查看上报问题。