react-app-shell
Version:
react打包脚本和example, 这里的版本请忽略
123 lines (111 loc) • 3.06 kB
JavaScript
import sensors from 'sa-sdk-javascript';
import { appConfig } from '../config';
import { localStore, tools } from './index';
/**
* 前端监控, 日志上报
* @type {{init: monitor.init, login: monitor.login, logout: monitor.logout, log: monitor.log}}
*/
const monitor = {
/**
* 初始化神策配置, 并开启默认事件追踪
*/
init: function() {
try {
sensors.init({
server_url: appConfig.resources.monitorUrl,
heatmap: {
// 是否开启点击图,默认 default 表示开启,自动采集 $WebClick 事件,可以设置 'not_collect' 表示关闭
clickmap: 'default',
// 是否开启触达注意力图,默认 default 表示开启,自动采集 $WebStay 事件,可以设置 'not_collect' 表示关闭
scroll_notice_map: 'default'
},
show_log: false
});
sensors.quick('autoTrack');
} catch (error) {
console.error(error);
}
},
/**
* 在登录和注册成功后,调用方法来标识真实用户
* @param userId
*/
login: function() {
try {
const userId = localStore.getUserId();
sensors.login(userId);
} catch (error) {
console.error(error);
}
},
/**
* 使用 logout 切换到之前的匿名id
*/
logout: function() {
try {
sensors.logout(true);
} catch (error) {
console.error(error);
}
},
/**
* 记录日志
* @param account 类型:字符串, 账号, 一般是手机号, 没有账号可以写 'debug', 'dev' 等
* @param message 类型:字符串, 日志信息
*/
log: function(account, message, errorCode = 'OK') {
account = tools.encryptAccount(account);
try {
const eventName = 'web_log';
const userAgent = window.navigator.userAgent;
const data = {
account: localStore.getUserId() || account || 'debug',
message: message,
userAgent: userAgent,
href: window.location.href,
createTime: new Date().format('yyyy-MM-dd,hh:mm:ss'),
errCode: errorCode
};
sensors.track(eventName, data);
} catch (error) {
console.error(error);
}
}
};
/**
* 保存之前的 onerror
* @type {ErrorEventHandler}
*/
const oldError = window.onerror;
/**
* 记录错误, 并上报
* @param msg
* @param fileUrl
* @param lineNo
* @param columnNo 最后两个参数有些部分浏览器拿不到
* @param error 最后两个参数有些部分浏览器拿不到
*/
const handleError = (...args) => {
const [msg, fileUrl, lineNo, columnNo, error] = args;
if (oldError) {
oldError.apply(window, args);
}
let stack = null;
if (error && error.stack) {
stack = error.stack;
}
const errorInfo = {
msg: msg || null,
fileUrl: fileUrl || null,
lineNo: lineNo || null,
columnNo: columnNo || null,
stack: stack
};
monitor.log('window.onerror', JSON.stringify(errorInfo));
};
/**
* 添加前端异常监控
* @type {handleError}
*/
window.onerror = handleError;
export default monitor;