Exercice : "Analyseur de Journal d'Erreurs"

Objectif : Créer un script Node.js qui analyse un fichier de journal contenant des messages d'erreur et extrait des informations spécifiques. L'exercice mettra en évidence la gestion des erreurs de lecture de fichiers, l'utilisation de try-catch pour les opérations de parsing, et la capture des erreurs non gérées.

Partie 1: Lecture et Analyse de Fichier

  1. Création du fichier de journal :

    • Créez un fichier texte error.log qui contient des lignes de journal simulées, certaines avec des erreurs formatées de manière incorrecte.
  2. Script de lecture de fichier :

    • Écrivez un script logAnalyzer.js qui lit le fichier error.log.
    • Utilisez le module fs pour lire le fichier de manière asynchrone.
    • Pour chaque ligne, essayez de parser l'erreur et de la logger dans la console.

Partie 2: Gestion des Exceptions

  1. Utilisation de Try-Catch :
    • Entourez le code de parsing avec un bloc try-catch pour gérer les erreurs de formatage.
    • Dans le bloc catch, loggez un message indiquant une erreur de parsing et continuez l'analyse des autres lignes.

Partie 3: Gestion des Erreurs Globales

  1. Gestion des événements uncaughtException :

    • Ajoutez un gestionnaire pour process.on('uncaughtException', handler).
    • Dans le gestionnaire, loggez l'erreur et terminez le processus.
  2. Gestion des événements unhandledRejection :

    • Ajoutez un gestionnaire pour process.on('unhandledRejection', handler).
    • Loggez l'erreur et terminez le processus.

Partie 4: Défi supplémentaire (Optionnel)

  1. Amélioration de l'analyseur :
    • Ajoutez la fonctionnalité de générer un rapport qui résume les erreurs trouvées, leur fréquence et des suggestions pour les résoudre.
    • Écrivez le rapport dans un nouveau fichier error_summary.log.

Exemple de contenu pour error.log :

Error: Missing parameter in configuration.
Warning: Deprecated method used at line 47.
Error: Invalid type provided for variable "age".
Info: Server started at port 3000.
Error: Unexpected token in JSON at position 57.

Exemple de code pour logAnalyzer.js :

const fs = require('fs');

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 {
      if (line.startsWith('Error:')) {
        // Simulate parsing logic that could throw
        if (line.includes('Unexpected token')) {
          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);
    }
  });
});

process.on('uncaughtException', (err) => {
  console.error('Unhandled exception:', err);
  process.exit(1);
});

process.on('unhandledRejection', (reason, promise) => {
  console.error('Unhandled rejection at:', promise, 'reason:', reason);
  process.exit(1);
});
 

Instructions pour l'étudiant :

  • Complétez le script pour qu'il analyse correctement le fichier error.log.
  • Assurez-vous que votre script gère les erreurs de parsing sans s'arrêter.
  • Testez votre script avec des erreurs simulées pour voir comment il gère uncaughtException et unhandledRejection.
  • (Optionnel) Générez un rapport d'erreur et écrivez-le dans un fichier.

Cet exercice aidera les étudiants à comprendre comment gérer les erreurs et les exceptions de manière robuste dans leurs applications Node.js.

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