首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将javascript错误发送到服务器

将javascript错误发送到服务器
EN

Stack Overflow用户
提问于 2017-07-21 19:34:41
回答 4查看 96关注 0票数 1

我有一个脚本来捕获错误并将它们发送到我的服务器。但我担心,如果我有很多用户,每个用户都有几个错误,可能会使我的服务器崩溃。

这是我的代码:

代码语言:javascript
运行
复制
window.onerror = function(msg, url, num) {
  try {
    var clientSideErrorInfo = {
      message: msg,
      url: url,
      num: num
    };

    var xhr = new XMLHttpRequest();
    xhr.open("POST", 'http://domain/api/v1/browser/', true);
    xhr.setRequestHeader("Content-Type", "application/json");
    xhr.send(JSON.stringify(clientSideErrorInfo));

    console.log(clientSideErrorInfo)
  } catch (e) {
    console.log(e);
    // Don't allow for infinitely recursively unhandled errors
    return true;
  }
};

有没有办法发送一组日志,而不是逐个发送?

谢谢

EN

回答 4

Stack Overflow用户

发布于 2017-07-21 19:40:38

您可以将所有错误收集到一个全局变量中,然后使用间隔发送它们,而不是在收到错误时发送错误。通过这种方式,您可以限制要同时发送的错误数,还可以增加间隔。

代码语言:javascript
运行
复制
 var errorSend = {};
errorSend.listErrors = [];
errorSend.maxErrors = 50;
errorSend.interval = 100;

window.onerror = function(msg, url, num) {

    var clientSideErrorInfo = {
      message: msg,
      url: url,
      num: num
    };

    listErrors.push(clientSideErrorInfo);
    console.log(clientSideErrorInfo)

};

function sendErrors() {
    if (errorSend.listErrors>errorSend.maxErrors) {
        console.log("Too many errors to send");
        return;
    }
    var errors = {list: errorSend.listErrors};
    var xhr = new XMLHttpRequest();
    xhr.open("POST", 'http://domain/api/v1/browser/', true);
    xhr.setRequestHeader("Content-Type", "application/json");
    xhr.send(JSON.stringify(errors));


}
setInterval(sendErrors,errorSend.interval);
票数 2
EN

Stack Overflow用户

发布于 2017-07-21 19:41:09

一些非常简单的东西,嗯:

代码语言:javascript
运行
复制
  var body =[];

    setInterval(function(){
      //Using a copy of the error queue
      let batch = body.slice();
      var xhr = new XMLHttpRequest();
        xhr.open("POST", 'http://domain/api/v1/browser/', true);
        xhr.setRequestHeader("Content-Type", "application/json");
        let myJson = JSON.stringify(body);
        xhr.send({
            data:{
                param: myJson
            }
       });
       //Updating the main queue to contain only unsent error messages
       body=body.slice(batch.length,body.length);
    },time_you_specify);

    window.onerror = function(msg, url, num) {
      try {
        var clientSideErrorInfo = {
          message: msg,
          url: url,
          num: num
        };

      body.push(clientSideErrorInfo);

        console.log(clientSideErrorInfo)
      } catch (e) {
        console.log(e);
        // Don't allow for infinitely recursively unhandled errors
        return true;
      }
    };
票数 2
EN

Stack Overflow用户

发布于 2017-07-21 19:45:14

不是这个工作的问题,但是如果你的web应用程序中有很多错误,可能会有问题。首先,您需要将您的javascript代码设置为完美状态。在这种情况下,你的想法是好的(捕捉所有可能的错误)。只需将其放在服务器上的某个表中。以下是mozilla dev站点关于param的信息:

代码语言:javascript
运行
复制
window.onerror = function (msg, url, lineNo, columnNo, error) {
    var string = msg.toLowerCase();
    var substring = "script error";
    if (string.indexOf(substring) > -1){
        alert('Script Error: See Browser Console for Detail');
    } else {
        var message = [
            'Message: ' + msg,
            'URL: ' + url,
            'Line: ' + lineNo,
            'Column: ' + columnNo,
            'Error object: ' + JSON.stringify(error)
        ].join(' - ');

        alert(message);
    }

    return false;
};

非常重要的使用(userAgent) detectBrowser数据,你必须知道哪个设备是用的也是哪个浏览器用的-just添加数据介绍你的功能。在90%的情况下,客户端错误只会发生在特定的平台上。例如,在android chrome版本<23...

请不要为这类任务使用interval,只是在错误捕获事件时将错误日志发送到服务器,就像您已经做的那样!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45236637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档