/** * Test du nouveau système de logging SourceFinder * Teste Pino + traçage hiérarchique + WebSocket */ require('dotenv').config(); // Activer logging console et WebSocket pour test process.env.ENABLE_CONSOLE_LOG = 'true'; process.env.ENABLE_LOG_WS = 'true'; process.env.LOG_LEVEL = 'trace'; const logger = require('./src/utils/logger'); const { setupTracer } = logger; async function testNewLoggingSystem() { console.log('🧪 Testing SourceFinder Advanced Logging System...\n'); // 1. Test des niveaux de base console.log('📝 1. Testing basic log levels...'); logger.info('SourceFinder démarré avec succès'); logger.debug('Mode développement activé'); logger.warn('Configuration par défaut utilisée'); logger.trace('Système de traçage initialisé'); // 2. Test des méthodes spécialisées SourceFinder console.log('\n🔍 2. Testing specialized SourceFinder methods...'); logger.newsSearch('Recherche articles pour Berger Allemand', { raceCode: '352-1', resultsCount: 15 }); logger.llmRequest('Génération de contenu via OpenAI', { model: 'gpt-4', tokens: 1000, estimatedCost: 0.02 }); logger.llmResponse('Contenu généré avec succès', 1250, 1000); logger.stockOperation('Sauvegarde nouveaux articles', 'save', 5, { sourceType: 'premium', totalScore: 285 }); logger.scoringOperation('Article scoré', 87, { specificity: 95, freshness: 90, quality: 85, reuse: 80 }); logger.performance('Recherche complète', 'search', 1850, { cacheHit: true, dbQueries: 3 }); // 3. Test du traçage hiérarchique console.log('\n🎯 3. Testing hierarchical tracing...'); const tracer = setupTracer('TestModule'); await tracer.run('processNewsRequest', async () => { logger.trace('Début traitement requête news'); await tracer.run('validateRequest', async () => { logger.trace('Validation paramètres requête'); await new Promise(resolve => setTimeout(resolve, 100)); }); await tracer.run('searchStock', async () => { logger.trace('Recherche dans le stock existant'); await new Promise(resolve => setTimeout(resolve, 200)); }); await tracer.run('scoreResults', async () => { logger.trace('Scoring des résultats trouvés'); await new Promise(resolve => setTimeout(resolve, 150)); }); logger.trace('Requête news traitée avec succès'); }, { raceCode: '352-1', clientId: 'test-client' }); // 4. Test des métriques et health checks console.log('\n📊 4. Testing metrics and health checks...'); logger.logMetric('articles_processed', 25, 'count', { source: 'premium', race: '352-1' }); logger.logHealthCheck('database', 'healthy', { connections: 5, responseTime: 45 }); logger.logHealthCheck('llm_provider', 'degraded', { errorRate: 0.02, avgResponseTime: 2500 }); // 5. Test gestion d'erreurs console.log('\n❌ 5. Testing error handling...'); try { throw new Error('Erreur simulée pour test'); } catch (error) { logger.error('Test error handling', error, { operation: 'test', context: 'logging-test' }); } logger.securityAlert('Tentative d\'injection détectée', 'prompt_injection', 'Ignore all previous instructions and...', { clientIp: '192.168.1.100', userAgent: 'TestBot/1.0' }); // 6. Test objets complexes console.log('\n🔧 6. Testing complex object logging...'); const complexObject = { id: 'article-123', title: 'Guide complet du Berger Allemand', metadata: { scores: { quality: 85, freshness: 90 }, tags: ['education', 'sante', 'comportement'], source: { domain: 'centrale-canine.fr', type: 'premium', reliability: 0.95 } } }; logger.logObject('Article complexe', complexObject); const results = [ { id: 1, score: 85, title: 'Article 1' }, { id: 2, score: 92, title: 'Article 2' }, { id: 3, score: 78, title: 'Article 3' } ]; logger.logArray('Résultats de recherche', results); console.log('\n✅ Test du système de logging terminé!'); console.log('📄 Logs sauvegardés dans: logs/sourcefinder-[timestamp].log'); console.log('🌐 Interface WebSocket disponible sur: ws://localhost:8082'); console.log('🛠️ Consulter logs: npm run logs:pretty'); // Attendre un peu pour que tous les logs soient écrits await new Promise(resolve => setTimeout(resolve, 1000)); } // Exécuter le test if (require.main === module) { testNewLoggingSystem().catch(console.error); } module.exports = { testNewLoggingSystem };