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

  1. Lecture de Fichier :

    • Assurez-vous que le script lit le fichier error.log sans erreurs.
    • Vérifiez que le fichier error.log existe et contient des données de test.
  2. 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

  1. 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

  1. uncaughtException :

    • Provoquez une exception non capturée pour tester si le gestionnaire uncaughtException fonctionne correctement.
    • Le script doit logger l'erreur et terminer le processus avec process.exit(1).
  2. unhandledRejection :

    • Provoquez un rejet de promesse non géré pour tester si le gestionnaire unhandledRejection fonctionne correctement.
    • Le script doit logger la raison du rejet et terminer le processus avec process.exit(1).

Vérification du Défi Supplémentaire

  1. 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é.

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 :

  1. Placez le script dans un fichier logAnalyzer.js.
  2. Assurez-vous que le fichier error.log est dans le même répertoire et contient des données de test.
  3. Exécutez le script avec Node.js en utilisant la commande node logAnalyzer.js.
  4. Observez les messages d'erreur dans la console pour les exceptions non capturées et les rejets de promesse non gérés.
  5. Commentez les blocs de test pour uncaughtException et unhandledRejection aprè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.

 

Modifié le: vendredi 3 novembre 2023, 09:24