Major Changes: - Moved legacy system to Legacy/ folder for archival - Built new modular architecture with strict separation of concerns - Created core system: Module, EventBus, ModuleLoader, Router - Added Application bootstrap with auto-start functionality - Implemented development server with ES6 modules support - Created comprehensive documentation and project context - Converted SBS-7-8 content to JSON format - Copied all legacy games and content to new structure New Architecture Features: - Sealed modules with WeakMap private data - Strict dependency injection system - Event-driven communication only - Inviolable responsibility patterns - Auto-initialization without commands - Component-based UI foundation ready Technical Stack: - Vanilla JS/HTML/CSS only - ES6 modules with proper imports/exports - HTTP development server (no file:// protocol) - Modular CSS with component scoping - Comprehensive error handling and debugging Ready for Phase 2: Converting legacy modules to new architecture 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
203 lines
7.3 KiB
JavaScript
203 lines
7.3 KiB
JavaScript
#!/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 }; |