2.1.2 • Published 4 years ago

monitor-web v2.1.2

Weekly downloads
3
License
ISC
Repository
github
Last release
4 years ago

web前端日志收集及埋点上报方案

安装
版本V2.1.2
npm install monitor-web --save
导入

功能分为MonitorWeb异常监控, 和AnalysisWeb埋点分析两部分, 可根据需要导入

import {MonitorWeb, AnalysisWeb} from 'monitor-web'

一、前端异常日志采集与上报

通过收集前端异常报错信息, 帮助开发者判断线上项目产生的问题;

适用大部分前端项目、PC、移动端、框架、原生

注意由于使用了indexDB作为本地存储, 暂不支持服务端渲染

上报接口请求方式为POST, 暂不支持更改

使用方法
js api配置项
字段名值类型是否必传描述及默认值
configObjecttrue配置对象
config::urlStringtrue上报接口url 必传
config::maxRetryCountNumberfalse日志上报失败重试次数, 默认值: 5
config::reportingCycleNumberfalse日志自动上报/清理周期, 单位/毫秒,默认值:10000
config::isLogBooleanfalse是否在控制台打印上报情况, 默认值:true
config::appidStringtrue应用ID, 必传
config::appNameStringtrue页面模块名称, 必传
创建实例
    new MonitorWeb({
        url: 'http://127.0.0.1:8888', // 上报url 必传!
        maxRetryCount: 5, // 上报重试次数
        reportingCycle: 10000, // 上报周期, 单位:毫秒
        appName: 'focus', // 页面项目名称 必传!
        isLog: true, // 是否在控制台打印日志及上报情况
        appid: 'yqnfFhj21'
    });
实例方法
catchError 手动将错误信息传入队列

一般在框架内部错误被拦截,无法被全局捕获时, 需使用框架自身的捕获报错的方法来将捕获到的异常信息传入上报队列

如vue有config.errorHandler, react有EerrorBoundary和unstable_handleError的方法;

当然, 也可在try catch中使用.

参数类型是否必传描述及默认值
errorObjecttrue错误信息

以vue举例:

// 在main.js中引入后, 自动注册为全局变量
import {MonitorWeb} from 'monitor-web'

// 将创建的实例赋给vue原型中方便调用
Vue.prototype.$MonitorWeb = new MonitorWeb(
    {
        url: 'http://127.0.0.1:8888', // 上报url 必传!
        maxRetryCount: 5, // 上报重试次数
        reportingCycle: 10000, // 上报周期, 单位:毫秒
        appName: '项目名称', // 项目名称 必传!
        isLog: true, // 是否在控制台打印日志及上报情况
        appid: 'appid' // 应用ID,必传
    }
)

// 在vue实例的config.errorHandler方法中, 将完整错误信息传入catchError等待上报
Vue.config.errorHandler = (err, vm, info) => {
  Vue.prototype.$MonitorWeb.catchError(err)
}
日志上报内容

接口及参数样例:

POST /weblog/logreport
字段名值类型是否必传描述及默认值
configObjecttrue配置对象
::urlStringtrue上报接口url
::max_retry_countNumbertrue日志上报失败重试次数, 默认值: 5
::reporting_cycleNumbertrue日志自动上报日志队列周期, 单位/毫秒,默认值:10000
::app_nameStringtrue页面模块名称, 必传
::is_logbooleantrue是否在控制台打印上报情况, 默认值:true
::appidStringtrue应用ID
dataArray(LogData)true异常日志
代码逻辑异常日志字段
Object:LogData
字段名值类型是否必传描述及默认值
log_typeStringtrue错误日志类型, 代码错误或ajax错误
click_eventsArray(Object)true点击报错时收集到的事件源及html结构路径
::heightNumberfalse浏览器高度px
::widthNumberfalse浏览器宽度px
::xNumberfalse鼠标位置x坐标
::yNumberfalse鼠标位置y坐标
::outer_htmlStringfalse点击元素标签以及子元素
::pathArray(Object)false点击事件源路径从window到事件源
::::node_nameStringfalse标签名称
::::class_nameStringfalse标签类名
::::idStringfalse标签ID
column_noNumbertrue报错代码起始列
line_noNumbertrue报错代码起始行
error_typeStringtrue错误类型
errorStringtrue完整异常信息
is_trustedStringtrue是否为用户操作事件导致的异常
msgStringtrue异常信息
pathStringtrue页面路径
timelongtrue异常产生时间戳
user_agentStringtrue用户信息Navigator.userAgent(操作系统版本、浏览器内核、浏览器版本)
time_local_stringStringtrue格式化后的时间
performanceObjecttrue性能监控
::timingObjecttrue统计各阶段耗时
::memoryObjecttrue内存占用情况
idStringtrue日志唯一ID
uuidStringtrue设备唯一ID
ajax网络异常日志字段
Object:LogData
字段名值类型是否必传描述及默认值
log_typeStringtrue错误日志类型, 代码错误或ajax错误
timelongtrue该条日志记录时间
time_local_stringStringtrue格式化后的时间
levelStringtrue该条日志的级别,分为 info、warn、error 3 种
messagesArraytrue请求状态、请求耗时、url、请求方式、发送数据、接收数据、状态码
pathStringtrue该条日志所在页面的 URL
codeNumbertrue请求状态码(如: 400、500等)
request_urlStringtrue请求URL
request_bodyObjecttrue请求体参数
methodStringtrue请求方式(如: "GET"、"POST"等)
responseStringtrue返回数据
spend_timeNumbertrue请求耗时
user_agentStringtrue用户信息Navigator.userAgent(操作系统版本、浏览器内核、浏览器版本)
performanceObjecttrue性能监控
::timingObjecttrue统计各阶段耗时
::memoryObjecttrue内存占用情况
click_eventsArray(Object)true点击报错时收集到的事件源及html结构路径
::heightNumberfalse浏览器高度px
::widthNumberfalse浏览器宽度px
::xNumberfalse鼠标位置x坐标
::yNumberfalse鼠标位置y坐标
::outer_htmlStringfalse点击元素标签以及子元素
::pathArray(Object)false点击事件源路径从window到事件源
::::node_nameStringfalse标签名称
::::class_nameStringfalse标签类名
::::idStringfalse标签ID
idStringtrue日志唯一ID
uuidStringtrue设备唯一ID

二、埋点分析

通过手动埋点方式, 收集用户操作信息, 帮助产品对用户行为以及各功能流程进行统计分析;

使用方法
js api配置项
字段名值类型是否必传描述及默认值
configObjecttrue配置对象
config::urlStringtrue埋点上报接口Url
config::appidStringtrue分析用户下appID
config::appNameStringtrueapp名称
创建实例
    new AnalysisWeb({ // 埋点相关配置
 		url: 'http://127.0.0.1:8888', // 埋点接口url, 必传
 		appid: '1000101', // 用户下该应用ID, 必传
 		appName: '本地测试应用' // 应用名称, 必传
    });
实例方法
clickStat 埋点上报

将方法放入需要埋点的流程代码中执行;

例如: 页面初始化、 登录、 注册成功、 跳转页面、游戏开始、游戏得分、游戏结束等关键步骤流程;

参数类型是否必传描述及默认值
eventNameStringtrue埋点事件名
paramsAnyfalse埋点自定义携带的参数

例:

// 创建实例
    let analysis = new AnalysisWeb({ // 埋点相关配置
        	url: 'http://127.0.0.1:8888', // 埋点接口url, 不传则默认使用日志上报url
            appid: '1000101', // 用户下该应用ID, 必传
            appName: '本地测试应用' // 应用名称
    });

// 在流程中调用
    analysis.clickStat('initPage', '进入页面')
// ...
    analysis.clickStat('login', {
        name: '登陆成功',
        userID: 'XXX'
    })
// ...
    analysis.clickStat('loadList', [
        {adName: '广告1', id: 'XXX'},
        {adName: '广告2', id: 'XXX'},
        {adName: '广告3', id: 'XXX'},
        {adName: '广告4', id: 'XXX'},
        {adName: '广告5', id: 'XXX'}
    ])

接口及参数样例:

POST /weblog/logreport
字段名值类型是否必传描述及默认值
configObjecttrue配置对象
config::urlStringtrue埋点上报接口Url
config::appidStringtrue分析用户下appID
config::app_nameStringtrueapp名称
dataArray(Object)true埋点数据
data::point_paramsAnyfalse埋点自定义携带参数
data::point_nameStringfalse埋点事件名
data::uuidStringtrue设备ID
data::user_agentObjecttrue用户代理信息
data::performanceObjecttrue性能信息
data::time_local_stringStringtrue上报时间