Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

前端监控系统落地篇 #6

Open
liveKang opened this issue May 10, 2017 · 0 comments
Open

前端监控系统落地篇 #6

liveKang opened this issue May 10, 2017 · 0 comments

Comments

@liveKang
Copy link
Owner

前端监控系统落地篇

一 目的

  • 收集JS错误日志
  • 收集ajax请求错误信息

JS错误日志

项目运行过程中,发生的JS代码报错,通过window.onerror方法收集。

收集参数
 * @param {String}  msg    错误信息
 * @param {String}  url    出错文件
 * @param {Number}  row    行号
 * @param {Number}  col    列号
 * @param {Object}  error  错误详细信息
 * @param {Date} 	date   错误发生的时间

行号和列号需对应开发环境开发文件的行和列,非压缩编译后。

收集ajax请求错误码

接口请求过程中,接口返回码非200,201,304等状态,通过try catch方法收集。

收集参数
 * @param {String}  msg    错误信息
 * @param {String}  url    接口地址
 * @param {Number}  status 状态码
 * @param {Date} 	date   错误发生的时间

二 前端实现

前端项目错误监控埋点

  • 监控错误代码实践与封装(同上收集参数)
  • 上报错误
  • 错误代码定位

上报错误

动态创建 img 标签的形式(类似如下代码)

/**
 * 上报数据
 *
 * @param {string} url 目标链接
 * @param {Object} data 上报数据
 */
function report(url, data) {
    if (!url || !data) {
        return;
    }
    // @see http://jsperf.com/new-image-vs-createelement-img
    var image = doc.createElement('img');
    var items = [];
    for (var key in data) {
        if (data[key]) {
            items.push(key + '=' + encodeURIComponent(data[key]));
        }
    }
    var name = 'img_' + (+new Date());
    entry[name] = image;
    image.onload = image.onerror = function () {
        entry[name] =
        image =
        image.onload =
        image.onerror = null;
        delete entry[name];
    };
    image.src = url + (url.indexOf('?') < 0 ? '?' : '&') + items.join('&');
}

错误代码定位:SourceMap 快速定位

SourceMap 是一个信息文件,存储着源文件的信息及源文件与处理后文件的映射关系。

在定位压缩代码的报错时,可以通过错误信息的行列数与对应的 SourceMap 文件,处理后得到源文件的具体错误信息。

SourceMap 文件中的 sourcesContent 字段对应源代码内容,不希望将 SourceMap 文件发布到外网上,而是将其存储到脚本错误处理平台上,只用在处理脚本错误中。s
通过 SourceMap 文件可以得到源文件的具体错误信息,结合 sourcesContent 上源文件的内容进行可视化展示.

基于 SourceMap 快速定位脚本报错方案

SourceMap文件的生成,gulp配置。

三 错误信息展示平台

  • 需要后台接口支持,进行数据统计和适当的分析。
  • 需要UI支持,错误信息展示平台。
  • 需要部署测试和生产两套环境,需要运维支持。

错误信息展示平台,前期需满足以下三点。

(1)简单的日志统计,对错误进行分析和统计。

(2)需要能够根据时间查询在某一段时间内的错误日志。

(3)能区分JS错误日志和ajax接口返回错误码日志。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant