Correction Exercice : "Analyseur de Journal d'Erreurs"
Pour corriger l'exercice "Analyseur de Journal d'Erreurs", nous allons passer en revue le script logAnalyzer.js et s'assurer qu'il fonctionne comme prévu. Voici les étapes de correction :
Vérification du Script de Lecture de Fichier
-
Lecture de Fichier :
- Assurez-vous que le script lit le fichier
error.logsans erreurs. - Vérifiez que le fichier
error.logexiste et contient des données de test.
- Assurez-vous que le script lit le fichier
-
Gestion des Erreurs de Lecture :
- Le script doit correctement logger l'erreur de lecture de fichier s'il y en a une et ne pas essayer de traiter les données.
Vérification de la Gestion des Exceptions
- Bloc Try-Catch :
- Le bloc try-catch doit être autour du code qui pourrait lancer une exception, comme le parsing des lignes.
- Le script ne doit pas s'arrêter si une exception est lancée; il doit logger l'erreur et continuer.
Vérification de la Gestion des Erreurs Globales
-
uncaughtException:- Provoquez une exception non capturée pour tester si le gestionnaire
uncaughtExceptionfonctionne correctement. - Le script doit logger l'erreur et terminer le processus avec
process.exit(1).
- Provoquez une exception non capturée pour tester si le gestionnaire
-
unhandledRejection:- Provoquez un rejet de promesse non géré pour tester si le gestionnaire
unhandledRejectionfonctionne correctement. - Le script doit logger la raison du rejet et terminer le processus avec
process.exit(1).
- Provoquez un rejet de promesse non géré pour tester si le gestionnaire
Vérification du Défi Supplémentaire
- Rapport d'Erreur :
- Si vous avez ajouté la génération de rapport, vérifiez que le script écrit un résumé des erreurs dans
error_summary.log. - Assurez-vous que le rapport contient les informations correctes et est bien formaté.
- Si vous avez ajouté la génération de rapport, vérifiez que le script écrit un résumé des erreurs dans
Exemple de Test pour Provoquer uncaughtException et unhandledRejection
Pour tester uncaughtException, vous pouvez ajouter un code qui lancera une erreur de manière intentionnelle, par exemple, après la boucle forEach :
// Provoquer une erreur non capturée
setImmediate(() => {
throw new Error('This is an uncaught exception');
});
Pour tester unhandledRejection, vous pouvez créer une promesse qui sera rejetée sans avoir de gestionnaire de rejet :
// Provoquer un rejet de promesse non géré
new Promise((resolve, reject) => {
reject('This is an unhandled rejection');
});
Ajoutez ces morceaux de code un à la fois et exécutez le script pour voir si les gestionnaires d'événements fonctionnent comme prévu.
Remarque : Ces tests sont destinés à être exécutés dans un environnement de développement et non en production, car ils provoqueront l'arrêt de votre application Node.js.
Pour compléter l'exercice et inclure les tests pour uncaughtException et unhandledRejection, nous allons modifier le script logAnalyzer.js en ajoutant des blocs de code qui provoqueront intentionnellement ces erreurs.
Voici le script logAnalyzer.js mis à jour avec les ajouts nécessaires :
const fs = require('fs');
// Lire le fichier de log et analyser son contenu
fs.readFile('error.log', 'utf8', (err, data) => {
if (err) {
console.error('Error reading file:', err);
return;
}
const lines = data.split('\n');
lines.forEach((line, index) => {
try {
// Simuler une opération de parsing qui pourrait échouer
if (line.startsWith('Error:')) {
if (line.includes('Invalid JSON format')) {
throw new SyntaxError('Invalid JSON format');
}
console.log(`Error found at line ${index + 1}: ${line}`);
}
} catch (e) {
console.error(`Parsing error at line ${index + 1}:`, e.message);
}
});
});
// Gestionnaire pour les exceptions non capturées
process.on('uncaughtException', (err) => {
console.error('Unhandled exception:', err);
process.exit(1);
});
// Gestionnaire pour les rejets de promesse non gérés
process.on('unhandledRejection', (reason, promise) => {
console.error('Unhandled rejection at:', promise, 'reason:', reason);
process.exit(1);
});
// Code pour tester uncaughtException
setImmediate(() => {
throw new Error('This is an uncaught exception');
});
// Code pour tester unhandledRejection
new Promise((resolve, reject) => {
reject('This is an unhandled rejection');
});
Instructions pour l'exécution du test :
- Placez le script dans un fichier
logAnalyzer.js. - Assurez-vous que le fichier
error.logest dans le même répertoire et contient des données de test. - Exécutez le script avec Node.js en utilisant la commande
node logAnalyzer.js. - Observez les messages d'erreur dans la console pour les exceptions non capturées et les rejets de promesse non gérés.
- Commentez les blocs de test pour
uncaughtExceptionetunhandledRejectionaprès avoir confirmé qu'ils fonctionnent comme prévu.
Remarque : Les blocs de code ajoutés pour tester uncaughtException et unhandledRejection provoqueront l'arrêt du script. Ils sont là uniquement à des fins de test et doivent être retirés ou commentés après avoir confirmé que le gestionnaire d'erreurs fonctionne correctement.