let debugConfig = { Vue: null, entryName: 'entryName', scriptVersion: '1.0', releaseStage: 'pro' }, debug = { notifyWarn({ message, metaData }) { let type = 'caught', severity = 'warn'; _logReport({ type, severity, message, metaData }); }, notifyError({ type = 'caught', error, message, metaData, lineNumber, columnNumber, fileName }){ let severity = 'error';
_logReport({ type, severity, error, metaData, message, lineNumber, columnNumber, fileName }); } };
// 日志上报 function _logReport({ type, severity, error, metaData, message, lineNumber, columnNumber, fileName }) {
let { silentDev, Vue } = debugConfig;
message = message || error && error.message || '';
let { entryName, releaseStage, severity, scriptVersion } = debugConfig, name = error && error.name || 'error', stacktrace = error && error.stack || '', time = Date.now(), title = document.title, url = window.location.href, client = {
userAgent: window.navigator.userAgent, height: window.screen.height, width: window.screen.width, referrer: window.document.referrer }, pageLevel = 'p4';
pageLevel = 'p0';
Vue.http.post(logReportUrl, { entryName, scriptVersion, message, metaData, name, releaseStage, severity, stacktrace, time, title, type, url, client, lineNumber, columnNumber, fileName, pageLevel });
}
export default function(Vue, option = {}){
debugConfig = Object.assign(debugConfig, { Vue, ...option });
function formatComponentName(vm) { if (vm.$root === vm) return 'root'; let name = vm._isVue ? (vm.$options && vm.$options.name) || (vm.$options && vm.$options._componentTag) : vm.name; return ( (name ? 'component + name + '>' : 'anonymous component') + (vm._isVue && vm.$options && vm.$options.__file ? ' at ' + (vm.$options && vm.$options.__file) : '') ); }
Vue.config.errorHandler = function(err, vm, info
) { if (vm) { let componentName = formatComponentName(vm); let propsData = vm.$options && vm.$options.propsData; debug.notifyError({ error: err, metaData: { componentName, propsData, info, userToken: { userId: 1 } } }); } else { debug.notifyError({ error: err, metaData: { userToken: { userId: 1 } } }); } }; window.onerror = function(msg, url, lineNo, columnNo, error) { debug.notifyError({ type: 'uncaught', error, metaData: { userToken: { userId: 1 } }, message: msg, lineNumber: lineNo, columnNumber: columnNo, fileName: url }); }
}
//最后我们把debug抛到外面供其他地方调用 export { debug }
|