#!/usr/bin/env node // ======================================== // DÉMONSTRATION - SYSTÈME DE LOGGING // Description: Démo complète des fonctionnalités du système de logging // ======================================== const { logSh, setupTracer } = require('./ErrorReporting'); // Configuration du traceur pour cette démo const tracer = setupTracer('DemoModule'); console.log(` ╔════════════════════════════════════════════════════════════╗ ║ 🎬 DÉMONSTRATION LOGGING ║ ║ Toutes les fonctionnalités en action ║ ╚════════════════════════════════════════════════════════════╝ `); async function demonstrationComplete() { // 1. DÉMONSTRATION DES NIVEAUX DE LOG console.log('\n📋 1. DÉMONSTRATION DES NIVEAUX DE LOG'); logSh('Message de trace pour débuggage détaillé', 'TRACE'); logSh('Message de debug avec informations techniques', 'DEBUG'); logSh('Message informatif standard', 'INFO'); logSh('Message d\'avertissement - situation inhabituelle', 'WARN'); logSh('Message d\'erreur - problème détecté', 'ERROR'); await sleep(1000); // 2. DÉMONSTRATION DU TRAÇAGE HIÉRARCHIQUE console.log('\n🌲 2. DÉMONSTRATION DU TRAÇAGE HIÉRARCHIQUE'); await tracer.run('operationPrincipale', async () => { logSh('▶ Début opération principale', 'TRACE'); await tracer.run('preparationDonnees', async () => { logSh('▶ Préparation des données', 'TRACE'); await sleep(500); logSh('✔ Données préparées', 'TRACE'); }, { dataSize: '1MB', format: 'JSON' }); await tracer.run('traitementDonnees', async () => { logSh('▶ Traitement des données', 'TRACE'); await tracer.run('validation', async () => { logSh('▶ Validation en cours', 'TRACE'); await sleep(300); logSh('✔ Validation réussie', 'TRACE'); }, { rules: 15, passed: 15 }); await tracer.run('transformation', async () => { logSh('▶ Transformation des données', 'TRACE'); await sleep(400); logSh('✔ Transformation terminée', 'TRACE'); }, { inputFormat: 'JSON', outputFormat: 'XML' }); logSh('✔ Traitement terminé', 'TRACE'); }, { records: 1500 }); logSh('✔ Opération principale terminée', 'TRACE'); }, { operationId: 'OP-2025-001', priority: 'high' }); await sleep(1000); // 3. DÉMONSTRATION DE LA GESTION D'ERREURS console.log('\n🚨 3. DÉMONSTRATION DE LA GESTION D\'ERREURS'); await tracer.run('operationAvecErreur', async () => { logSh('▶ Tentative d\'opération risquée', 'TRACE'); try { await simulerErreur(); } catch (error) { logSh(`✖ Erreur capturée: ${error.message}`, 'ERROR'); logSh(`Stack trace: ${error.stack}`, 'DEBUG'); } logSh('✔ Récupération d\'erreur gérée', 'TRACE'); }, { attemptNumber: 1 }); await sleep(1000); // 4. DÉMONSTRATION DES MESSAGES CONTEXTUELS console.log('\n🎯 4. DÉMONSTRATION DES MESSAGES CONTEXTUELS'); const userId = 'user123'; const orderId = 'ORD-456'; await tracer.run('traitementCommande', async () => { logSh(`▶ Début traitement commande ${orderId} pour utilisateur ${userId}`, 'TRACE'); logSh(`Validation utilisateur ${userId}`, 'DEBUG'); logSh(`Utilisateur ${userId} validé avec succès`, 'INFO'); logSh(`Calcul du montant pour commande ${orderId}`, 'DEBUG'); logSh(`Montant calculé: 125.50€ pour commande ${orderId}`, 'INFO'); logSh(`Traitement paiement commande ${orderId}`, 'DEBUG'); logSh(`Paiement confirmé pour commande ${orderId}`, 'INFO'); logSh(`✔ Commande ${orderId} traitée avec succès`, 'TRACE'); }, { userId, orderId, amount: 125.50 }); await sleep(1000); // 5. DÉMONSTRATION DES LOGS TECHNIQUES console.log('\n⚙️ 5. DÉMONSTRATION DES LOGS TECHNIQUES'); await tracer.run('operationTechnique', async () => { logSh('▶ Connexion base de données', 'TRACE'); logSh('Paramètres connexion: host=localhost, port=5432, db=produit', 'DEBUG'); logSh('Connexion BDD établie', 'INFO'); logSh('▶ Exécution requête complexe', 'TRACE'); logSh('SQL: SELECT * FROM users WHERE active = true AND last_login > ?', 'DEBUG'); logSh('Requête exécutée en 45ms, 234 résultats', 'INFO'); logSh('▶ Mise en cache des résultats', 'TRACE'); logSh('Cache key: users_active_recent, TTL: 300s', 'DEBUG'); logSh('Données mises en cache', 'INFO'); logSh('✔ Opération technique terminée', 'TRACE'); }, { dbHost: 'localhost', cacheSize: '2.3MB' }); await sleep(1000); // 6. DÉMONSTRATION DES LOGS PERFORMANCE console.log('\n🏃 6. DÉMONSTRATION DES LOGS PERFORMANCE'); const startTime = Date.now(); await tracer.run('operationPerformance', async () => { logSh('▶ Début opération critique performance', 'TRACE'); for (let i = 1; i <= 5; i++) { await tracer.run(`etape${i}`, async () => { logSh(`▶ Étape ${i}/5`, 'TRACE'); const stepStart = Date.now(); await sleep(100 + Math.random() * 200); // Simule du travail variable const stepDuration = Date.now() - stepStart; logSh(`✔ Étape ${i} terminée en ${stepDuration}ms`, 'TRACE'); }, { step: i, total: 5 }); } const totalDuration = Date.now() - startTime; logSh(`✔ Opération terminée en ${totalDuration}ms`, 'TRACE'); if (totalDuration > 1000) { logSh(`Performance dégradée: ${totalDuration}ms > 1000ms`, 'WARN'); } else { logSh('Performance satisfaisante', 'INFO'); } }, { expectedDuration: '800ms', actualDuration: `${Date.now() - startTime}ms` }); // RÉSUMÉ FINAL console.log(` ╔════════════════════════════════════════════════════════════╗ ║ ✅ DÉMONSTRATION TERMINÉE ║ ╚════════════════════════════════════════════════════════════╝ 🎯 Vous avez vu en action: • Niveaux de logs (TRACE, DEBUG, INFO, WARN, ERROR) • Traçage hiérarchique avec contexte • Gestion d'erreurs structurée • Messages contextuels avec IDs • Logs techniques détaillés • Monitoring de performance 📊 Consulter les logs générés: npm run logs:pretty 🌐 Interface temps réel: npm run logs:server # Puis ouvrir tools/logs-viewer.html 🔍 Rechercher dans les logs: npm run logs:search Le système de logging est maintenant configuré et opérationnel ! 🚀 `); } async function simulerErreur() { await sleep(200); throw new Error('Connexion base de données impossible - timeout après 5000ms'); } function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } // Lancer la démonstration if (require.main === module) { demonstrationComplete().catch(err => { logSh(`Erreur dans la démonstration: ${err.message}`, 'ERROR'); process.exit(1); }); } module.exports = { demonstrationComplete };