UNPKG

react-app-shell

Version:

react打包脚本和example, 这里的版本请忽略

123 lines (111 loc) 3.06 kB
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;