interface LogTypes {
message: string | number | Object
tag?: string;
level?: Severity;
ex?: any;
}
export declare function log({ message, tag, level, ex }: LogTypes): void;
Name | Type | Default | Description |
---|---|---|---|
dsn |
string |
"" |
dsn服务地址,上报接口的地址,post方法,可选useImgUpload 方式 |
disabled |
boolean |
false |
默认是开启状态,为true时,会将sdk禁用 |
apikey |
string |
"" |
每个项目对应一个apikey,用于存放错误集合的唯一标识 |
debug |
boolean |
false |
默认不会在控制台打印用户行为和错误信息,为true时将会在控台打印,推荐本地调试时置为true |
enableTraceId |
boolean |
false |
为true 时,页面的所有请求都会生成一个uuid,放入请求头中,和配置项:traceIdFieldName 搭配使用 |
traceIdFieldName |
string |
Trace-Id |
如果enableTraceId 为true时,将会在所有请求头中添加key 为Trace-Id ,value 为uuid 的traceId ,与includeHttpUrlTraceIdRegExp 搭配使用 |
includeHttpUrlTraceIdRegExp |
RegExp |
null |
如果你开启了enableTraceId ,还需要配置该属性,比如将改属性置为:/api/ ,那么所有包含api 的的接口地址都将塞入traceId |
maxBreadcrumbs |
number |
20 |
用户行为存放的最大容量,最大是100,当你配置超过100时,最终还是会设置成100,一方面是防止占更多的内存、一方面是保存超过100条用户行为没多大意义 |
filterXhrUrlRegExp |
RegExp |
null |
默认为空,所有ajax都会被监听,不为空时,filterXhrUrlRegExp.test(xhr.url)为true时过滤 |
silentXhr |
boolean |
false |
默认会监控xhr,为true时,将不再监控 |
silentFetch |
boolean |
false |
默认会监控fetch,为true时,将不再监控 |
silentConsole |
boolean |
false |
默认会监控console,为true时,将不再监控 |
silentDom |
boolean |
false |
默认会监听click事件,当用户点击的标签不是body时就会被放入breadcrumb,为true,将不在监听 |
silentHistory |
boolean |
false |
默认会监控popstate、pushState、replaceState,为true时,将不再监控 |
silentError |
boolean |
false |
默认会监控error,为true时,将不在监控 |
silentUnhandledrejection |
boolean |
false |
默认会监控unhandledrejection,为true时,将不在监控 |
silentHashchange |
boolean |
false |
默认会监控hashchange,为true时,将不在监控 |
silentVue |
boolean |
false |
默认会监控Vue的错误,为true时,将不在监控 |
**示例:**用户行为栈最大长度为30
MITO.init({
...
maxBreadcrumbs: 30
})
export interface HooksTypes {
/**
* 钩子函数,配置发送到服务端的xhr
* 可以对当前xhr实例做一些配置:xhr.setRequestHeader()、xhr.withCredentials
* 会在xhr.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8')、
* xhr.withCredentials = true,后面调用该函数
* ../param xhr XMLHttpRequest的实例
*/
configReportXhr?(xhr: XMLHttpRequest): void
/**
* 钩子函数,在每次发送事件前会调用
*
* ../param event 有SDK生成的错误事件
* ../returns 如果返回 null | undefined | boolean 时,将忽略本次上传
*/
beforeDataReport?(event: TransportDataType): Promise<TransportDataType | null | CANCEL> | TransportDataType | CANCEL | null
/**
* 钩子函数,每次发送前都会调用,设置上报到服务端的地址
*
* @param {string} url 上报到服务端的地址
* @returns {(string | null)} 返回string
* @memberof HooksTypes
*/
configReportUrl?(url: string): string
/**
* 钩子函数,在每次添加用户行为事件前都会调用
*
* ../param breadcrumb 由SDK生成的breacrumb事件栈
* ../param hint 当次的生成的breadcrumb数据
* ../returns 如果返回 null | undefined | boolean 时,将忽略本次的push
*/
beforePushBreadcrumb?(breadcrumb: Breadcrumb, hint: BreadcrumbPushData): BreadcrumbPushData | CANCEL
/**
* 在状态小于400并且不等于0的时候回调用当前hook
* ../param data 请求状态为200时返回的响应体
* ../returns 如果返回 null | undefined | boolean 时,将忽略本次的上传
*/
// afterSuccessHttp?<T>(data: T): string | CANCEL
/**
* 钩子函数,拦截用户页面的ajax请求,并在ajax请求发送前执行该hook,可以对用户发送的ajax请求做xhr.setRequestHeader
* ../param config 当前请求的
*/
beforeAppAjaxSend?(config: IRequestHeaderConfig, setRequestHeader: IBeforeAppAjaxSendConfig): void
/**
* 钩子函数,在beforeDataReport后面调用,在整合上报数据和本身SDK信息数据前调用,当前函数执行完后立即将数据错误信息上报至服务端
* trackerId表示用户唯一键(可以理解成userId),需要trackerId的意义可以区分每个错误影响的用户数量
*/
backTrackerId?(): string | number
}
示例:上报服务端(你配置的dsn或trackDsn接口)时,可以自定义设置请求头,如下所示,设置了Content-Type
MITO.init({
...
configReportXhr(xhr){
xhr.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8')
}
})
function(event: TransportDataType): Promise<TransportDataType | null | CANCEL> | TransportDataType | CANCEL | null
interface TransportDataType{
authInfo: AuthInfo
breadcrumb: BreadcrumbPushData[]
data: ReportDataType
record?: any[]
}
interface ReportDataType {
type?: ERRORTYPES
message?: string
url: string
name?: string
stack?: any
time?: number
errorId?: number
level: number
// ajax
elapsedTime?: number
request?: {
httpType?: string
method: string
url: string
data: any
}
response?: {
status: number
statusText: string
description: string
}
// vue
componentName?: string
propsData?: any
// logerror
customTag?: string
}
示例:如果错误事件发生在test.com/test
地址下则不上报服务端
MITO.init({
...
async beforeDataReport(event){
if (event.data.url === 'test.com/test') return false
// 注意:判断是否调用dsn还是trackDsn的规则
// (event.data.actionType === undefined || !event.data.isTrackData) 为true那么认为此次上报的类型是错误上报,否则是埋点上报
}
})
function(breadcrumb: Breadcrumb, hint: BreadcrumbPushData)
interface BreadcrumbPushData {
type: string
data: any
}
export class Breadcrumb{
private maxBreadcrumbs:number
private stack:BreadcrumbPushData[]
push()
getStack()
}
示例:如果type
是Console
的就过滤,不会push
到当前用户行为栈中
MITO.init({
...
beforePushBreadcrumb(breadcrumb, hint){
if (hint.type === 'Console') return false
}
})
示例:拦截用户页面的ajax请求,并在ajax请求发送前执行该hook。在页面所有ajax请求时添加请求头,类似axios
的request拦截器,
MITO.init({
...
beforeAppAjaxSend({method, url}, setRequestHeader){
if (method === 'GET') {
setRequestHeader('Content-Type', 'text/plain;charset=UTF-8')
}
}
})
示例:trackerId表示用户唯一键(可以理解成userId),可以用uuid生成或用直接用userId,为了方便区分每个错误的用户数,会放入authInfo
对象中
MITO.init({
...
backTrackerId(){
// 比如userId在localStorage中
return localStorage.getItem('userId')
}
})