UNPKG

gxd-vue-library

Version:

依赖与element Ui插件库,聚福宝福利PC端插件库

113 lines (96 loc) 2.81 kB
'use strict'; const clog = require('./../../build/clog'); let path = require('path'); let settings = require('./../../settings'); let __xdRuntime = null; class xdRuntime { constructor() { //存储打点信息 this.eventObj = {}; //慢执行时间大小 this.slowTime = 3000; } getErrorInfo(error){ //非错误对象 if (Object.prototype.toString.call(error) !== '[object Error]') { return error; } let caller_line = error.stack.split("\n")[3]; let errorType = error.stack.split("\n")[0]; let path = require('path'); let stackReg = /at\s+(.*)\s+\((.*):(\d*):(\d*)\)/i; let stackReg2 = /at\s+()(.*):(\d*):(\d*)/i; let stacklist = (error).stack.split('\n').slice(3); let s = stacklist[0]; let sp = stackReg.exec(s) || stackReg2.exec(s); let data = {}; data['error'] = errorType; data['all'] = error.stack.split("\n"); data['source'] = caller_line; data['file'] = path.basename(data.path); if (sp && sp.length === 5) { data.method = sp[1]; data.path = sp[2]; data.line = sp[3]; data.pos = sp[4]; } return data; } getInfo(){ try { throw Error('') } catch (err) { //显示stack执行相关信息 if(settings.isTimeLog) { console.log('handleInfo',err.stack); } return this.getErrorInfo(err); } } getTime(){ return new Date().getTime(); } /** * @description 开始执行时间 * @param key {Number| String} 代码块唯一标示 格式:pages/xx/xx.function.xxx */ start(key){ if(this.eventObj[key]) { delete this.eventObj[key] } this.eventObj[key] = {}; this.eventObj[key]['info'] = this.getInfo(); this.eventObj[key]['start'] = this.getTime(); } /** * @description 结束执行时间 * @param key {Number| String} 代码块唯一标示 格式:pages/xx/xx.function.xxx */ end(key){ if (!this.eventObj[key]) { console.error(`key:${key}, 开始执行代码块信息不存在`); return; } this.eventObj[key]['end'] = this.getTime(); this.eventObj[key]['useTime'] = this.getTime() - this.eventObj[key]['start']; //慢执行 if(this.eventObj[key]['useTime'] > this.slowTime) { clog(`Runtime Slow, key: ${key} ${this.eventObj[key]['useTime']} ms`, 'red'); this.logs({...this.eventObj[key], keyword: key}, 'alert') } else{ clog(`Runtime Fast, key: ${key} ${this.eventObj[key]['useTime']} ms`, 'green'); this.logs({...this.eventObj[key], keyword: key}, 'info') } } logs(params, level){ updateLog(params, level); //getApp().saveLogs(params, level); } } export function runtime() { if(__xdRuntime === null) { __xdRuntime = new xdRuntime(); } return __xdRuntime }