JavaScript 錯誤監控和日誌記錄對於維護應用程式的穩定性和效能至關重要。在本文中,我們將探索可以幫助您有效監控和記錄 JavaScript 程式碼中的錯誤的先進技術。我們將介紹全域錯誤處理程序、try/catch 區塊、堆疊追蹤、日誌庫、自訂錯誤類別、錯誤報告和通知以及生產中的錯誤追蹤。
全域錯誤處理程序可讓您擷取並處理 JavaScript 應用程式執行階段發生的錯誤。透過利用 window.onerror 和 window.onunhandledrejection,您可以記錄或報告錯誤和異常。
window.onerror = function(message, url, line, column, error) { console.error("An error occurred:", message); console.error("URL:", url); console.error("Line:", line); console.error("Column:", column); console.error("Error object:", error); }; window.onunhandledrejection = function(event) { console.error("Unhandled promise rejection:", event.reason); };
所提供的程式碼在 JavaScript 中設定全域錯誤處理程序。 window.onerror 捕獲未處理的錯誤並記錄錯誤訊息、腳本 URL、行號和列號以及錯誤物件。 window.onunhandledrejection 捕獲未處理的 Promise 拒絕並記錄拒絕原因。這些處理程序有助於識別和記錄網頁運行時發生的錯誤。
An error occurred: ReferenceError: someVariable is not defined URL: https://example.com/js/app.js Line: 42 Column: 15 Error object: ReferenceError: someVariable is not defined
Using try/catch blocks allows you to handle specific exceptions and gracefully recover from errors that might occur within a block of code.
try { // Code that might throw an error const result = someFunction(); console.log("Result:", result); } catch (error) { console.error("An error occurred:", error); }
提供的程式碼使用 try/catch 區塊來處理 JavaScript 中的潛在錯誤。 try 區塊包含可能引發錯誤的程式碼,如果發生錯誤,則執行 catch 區塊,它使用 console.error() 記錄錯誤訊息。
An error occurred: TypeError: someFunction is not a function
堆疊追蹤提供了有關導致錯誤的函數呼叫順序的寶貴資訊。它們有助於了解錯誤的根源並有效地診斷問題。
function foo() { bar(); } function bar() { throw new Error("Something went wrong"); } try { foo(); } catch (error) { console.error("Error stack trace:", error.stack); }
程式碼定義了兩個函數:foo() 和 bar()。當 foo() 被呼叫時,它會呼叫 bar(),它會使用 throw new Error() 故意拋出錯誤。
程式碼包含在 try/catch 區塊中。當 try 區塊內拋出錯誤時,catch 區塊會擷取該錯誤,並將錯誤物件儲存在 error 變數中。
catch 區塊使用 console.error() 和 error.stack 屬性記錄錯誤的堆疊追蹤。
Error stack trace: Error: Something went wrong at bar (script.js:5:9) at foo (script.js:2:3) at script.js:10:3
像 Sentry、Rollbar 和 LogRocket 這樣的日誌庫提供了進階錯誤監控功能。它們簡化了錯誤追蹤、聚合和報告,並且通常提供與框架和服務的整合。
// Using Sentry logging library Sentry.init({ dsn: 'your-sentry-dsn', // Other configuration options }); try { // Code that might throw an error } catch (error) { Sentry.captureException(error); }
程式碼初始化 Sentry 日誌庫並設定錯誤擷取。在try區塊內,可以放置可能拋出錯誤的程式碼,如果發生錯誤,catch區塊使用Sentry.captureException()將錯誤傳送給Sentry進行記錄和分析。
Extending the built-in Error class allows you to create custom error classes with additional properties and methods. This makes error handling more informative and easier.
class MyCustomError extends Error { constructor(message, customProperty) { super(message); this.customProperty = customProperty; } } try { throw new MyCustomError("Something went wrong.", "Custom data"); } catch (error) { console.error("Custom property:", error.customProperty); }
輸出
Custom property: Custom data
function sendErrorNotification(error) { // Code to send an error notification via email or chat } try { // Code that might throw an error } catch (error) { sendErrorNotification(error); }
說明
在 try 區塊中,您可以放置可能引發錯誤的程式碼。如果發生錯誤,則執行 catch 區塊,並以錯誤物件作為參數呼叫 sendErrorNotification() 函數,觸發錯誤通知流程。
此程式碼示範如何在 try 區塊內發生錯誤時透過呼叫自訂函數傳送錯誤通知來處理錯誤。它允許主動通知和回應錯誤,有助於及時排除故障並解決問題。
結論
以上是JavaScript中的錯誤監控與日誌記錄技術的詳細內容。更多資訊請關注PHP中文網其他相關文章!