La surveillance et la journalisation des erreurs JavaScript sont essentielles au maintien de la stabilité et des performances des applications. Dans cet article, nous explorerons des techniques avancées qui peuvent vous aider à surveiller et enregistrer efficacement les erreurs dans votre code JavaScript. Nous couvrirons les gestionnaires d'erreurs globaux, les blocs try/catch, les traces de pile, les bibliothèques de journalisation, les classes d'erreurs personnalisées, les rapports et notifications d'erreurs, ainsi que le suivi des erreurs en production.
Les gestionnaires d'erreurs globaux vous permettent de détecter et de gérer les erreurs qui se produisent pendant l'exécution de votre application JavaScript. En tirant parti de window.onerror et window.onunhandledrejection, vous pouvez enregistrer ou signaler les erreurs et les exceptions.
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); };
Le code fourni définit un gestionnaire d'erreurs global en JavaScript. window.onerror détecte les erreurs non gérées et enregistre le message d'erreur, l'URL du script, les numéros de ligne et de colonne et l'objet d'erreur. window.onunhandledrejection capture les rejets de promesse non gérés et enregistre la raison du rejet. Ces gestionnaires aident à identifier et à enregistrer les erreurs qui se produisent lors de l'exécution de la page Web.
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
L'utilisation de blocs try/catch vous permet de gérer des exceptions spécifiques et de récupérer gracieusement des erreurs qui pourraient survenir dans un bloc de code.
try { // Code that might throw an error const result = someFunction(); console.log("Result:", result); } catch (error) { console.error("An error occurred:", error); }
Le code fourni utilise des blocs try/catch pour gérer les erreurs potentielles en JavaScript. Le bloc try contient du code qui peut générer une erreur, et si une erreur se produit, le bloc catch est exécuté, qui enregistre le message d'erreur à l'aide de console.error().
An error occurred: TypeError: someFunction is not a function
Les traces de pile fournissent des informations précieuses sur la séquence d'appels de fonction qui ont provoqué l'erreur. Ils aident à comprendre la source des erreurs et à diagnostiquer efficacement les problèmes.
function foo() { bar(); } function bar() { throw new Error("Something went wrong"); } try { foo(); } catch (error) { console.error("Error stack trace:", error.stack); }
Le code définit deux fonctions : foo() et bar(). Lorsque foo() est appelé, il appelle bar(), qui génère intentionnellement une erreur en utilisant throw new Error().
Le code est contenu dans un bloc try/catch. Lorsqu'une erreur est générée à l'intérieur du bloc try, le bloc catch détecte l'erreur et stocke l'objet d'erreur dans la variable d'erreur.
Le bloccatch enregistre la trace de pile de l'erreur à l'aide des propriétés console.error() et 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
Les bibliothèques de journalisation telles que Sentry, Rollbar et LogRocket offrent des capacités avancées de surveillance des erreurs. Ils simplifient le suivi des erreurs, l'agrégation et le reporting, et fournissent souvent une intégration avec des frameworks et des services.
// 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); }
Le code initialise la bibliothèque de journaux Sentry et configure la capture des erreurs. Dans le bloc try, vous pouvez placer du code susceptible de générer des erreurs. Si une erreur se produit, le bloc catch utilise Sentry.captureException() pour envoyer l'erreur à Sentry pour enregistrement et analyse.
L'extension de la classe Error intégrée vous permet de créer des classes d'erreur personnalisées avec des propriétés et des méthodes supplémentaires. Cela rend la gestion des erreurs plus informative et plus facile.
Considérez le code ci-dessous.
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); }
Ce code définit une classe d'erreur personnalisée MyCustomError qui étend Error. À l'intérieur du bloc try, il génère une instance MyCustomError avec un message d'erreur spécifique et des propriétés personnalisées. Dans le bloc catch, il enregistre les propriétés personnalisées de l'objet d'erreur intercepté.
Custom property: Custom data
Intégrez votre système de surveillance des erreurs à des services de notification tels que des plateformes de courrier électronique ou de chat pour recevoir des alertes en temps réel lorsque des erreurs critiques se produisent.
Considérez le code ci-dessous.
function sendErrorNotification(error) { // Code to send an error notification via email or chat } try { // Code that might throw an error } catch (error) { sendErrorNotification(error); }
Dans un bloc try, vous pouvez placer du code susceptible de générer une erreur. Si une erreur se produit, le bloc catch est exécuté et la fonction sendErrorNotification() est appelée avec l'objet d'erreur comme paramètre pour déclencher le processus de notification d'erreur.
Ce code montre comment gérer les erreurs en appelant une fonction personnalisée pour envoyer une notification d'erreur lorsqu'une erreur se produit dans un bloc try. Il permet une notification et une réponse proactives aux erreurs, aidant ainsi à dépanner et à résoudre les problèmes rapidement.
Conclusion
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!