0
我試圖將所有我的Javascript異常以及未處理的異常一起發送到服務器進行日誌記錄。我已經通過window.onerror
documentation和also this post瞭解了這個問題,但它們只適用於未處理的異常。向服務器發送已處理的(不只是未處理的)Javascript錯誤
window.onerror
如果異常已在catch()
塊中處理,則不會觸發。
一個'痛苦'的方法是將我的logToServer()
函數手動附加到我的代碼中的每個catch()
塊(它也可以),但我希望有更好的解決方案。
我已經在下面設置了一小段代碼。只有
var logToServer = function logToServer() {
console.info('logToServer() called');
};
window.onerror = function(z, x, c, v, b) {
console.info(z);
console.info(x);
console.info(c);
console.info(v);
console.info(b);
// call a function to send to server
logToServer();
};
window.addEventListener('error', function(z, x, c, v, b) {
console.info(z);
// call a function to send to server
logToServer();
});
// test w/o catch-block
//console.info(err); // calls logToServer()
// test w/ catch-block
try {
console.info(asd); // does not call logToServer()
} catch (err) {
console.error(err);
};
Enable logs in console.
對於已處理的異常,請執行您的邏輯,然後在最後從catch塊中拋出您的異常。 –
爲什麼?無論您使用* try ... catch *來處理您無法避免的錯誤,那麼這些錯誤都會被處理*(並且不應該有這樣的錯誤發生的地方)*。或者,您可以在任何地方使用* try .. catch *來處理蹩腳的錯誤代碼,並避免用戶看到這些錯誤或其後果。在這種情況下,請停止捕獲這些錯誤並修復導致它們的代碼。再說一遍,爲什麼你有這麼多的*嘗試... catch *塊在你的代碼中,你發現手動添加日誌很麻煩?爲什麼要記錄(服務器端)每個已經處理的錯誤? – Thomas
@MuhammadQasim - 你的意思是手動編輯每個catch塊,並拋出異常時調用我的邏輯?我可以做到這一點,但訪問每個catch塊似乎是一個矯枉過正。更不用說總是要確保將來任何新的try catch塊都應該總是調用我的服務器日誌邏輯函數。你的意思是別的嗎? – Rodiwa