gxd-vue-library
Version:
依赖与element Ui插件库,聚福宝福利PC端插件库
113 lines (96 loc) • 2.81 kB
JavaScript
;
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
}