我有一个脚本来捕获错误并将它们发送到我的服务器。但我担心,如果我有很多用户,每个用户都有几个错误,可能会使我的服务器崩溃。
这是我的代码:
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;
}
};有没有办法发送一组日志,而不是逐个发送?
谢谢
发布于 2017-07-21 19:40:38
您可以将所有错误收集到一个全局变量中,然后使用间隔发送它们,而不是在收到错误时发送错误。通过这种方式,您可以限制要同时发送的错误数,还可以增加间隔。
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);发布于 2017-07-21 19:41:09
一些非常简单的东西,嗯:
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;
}
};发布于 2017-07-21 19:45:14
不是这个工作的问题,但是如果你的web应用程序中有很多错误,可能会有问题。首先,您需要将您的javascript代码设置为完美状态。在这种情况下,你的想法是好的(捕捉所有可能的错误)。只需将其放在服务器上的某个表中。以下是mozilla dev站点关于param的信息:
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,只是在错误捕获事件时将错误日志发送到服务器,就像您已经做的那样!
https://stackoverflow.com/questions/45236637
复制相似问题