// === WEBSOCKET LOGGER === // Envoie les logs vers le serveur WebSocket de ton système console.log('🔧 WebSocket Logger chargé'); // Variables globales window.wsLogger = null; window.logQueue = []; window.isConnected = false; // Fonction pour se connecter au serveur WebSocket function connectToLogServer() { // Désactiver WebSocket en mode file:// if (window.location.protocol === 'file:') { console.log('📁 Mode file:// détecté - WebSocket désactivé'); return; } try { console.log('🔌 Tentative de connexion WebSocket sur ws://localhost:8082...'); window.wsLogger = new WebSocket('ws://localhost:8082'); window.wsLogger.onopen = function() { console.log('✅ Connecté au serveur de logs WebSocket'); window.isConnected = true; // Log de confirmation window.logSh('🎉 WebSocket Logger connecté avec succès!', 'INFO'); window.logSh(`📊 ${window.logQueue.length} logs en attente dans la queue`, 'DEBUG'); // Vider la queue des logs en attente let sentCount = 0; while (window.logQueue.length > 0) { const logData = window.logQueue.shift(); window.wsLogger.send(JSON.stringify(logData)); sentCount++; } if (sentCount > 0) { window.logSh(`📤 ${sentCount} logs en attente envoyés au serveur`, 'INFO'); } }; window.wsLogger.onclose = function() { console.log('❌ Connexion WebSocket fermée'); window.isConnected = false; // Tentative de reconnexion après 3 secondes setTimeout(connectToLogServer, 3000); }; window.wsLogger.onerror = function(error) { console.log('❌ Erreur WebSocket:', error); window.isConnected = false; }; } catch (error) { console.log('❌ Impossible de se connecter au serveur de logs:', error); setTimeout(connectToLogServer, 5000); } } // Fonction logSh qui envoie au WebSocket window.logSh = function(message, level = 'INFO') { // Sécuriser le level pour éviter les erreurs if (typeof level !== 'string') { level = 'INFO'; } const timestamp = new Date().toISOString(); const logData = { timestamp: timestamp, level: level.toUpperCase(), message: message }; // Log aussi dans la console pour backup const color = level === 'ERROR' ? 'color: red' : level === 'WARN' ? 'color: orange' : level === 'DEBUG' ? 'color: blue' : 'color: green'; console.log(`%c[${new Date().toLocaleTimeString()}] ${level}: ${message}`, color); // Envoyer au WebSocket (seulement si pas en mode file://) if (window.location.protocol !== 'file:') { if (window.isConnected && window.wsLogger) { try { window.wsLogger.send(JSON.stringify(logData)); } catch (error) { // Si erreur d'envoi, mettre en queue window.logQueue.push(logData); } } else { // Pas connecté, mettre en queue window.logQueue.push(logData); // Limiter la queue à 100 messages if (window.logQueue.length > 100) { window.logQueue.shift(); } } } // En mode file://, on log seulement dans la console (pas de WebSocket) }; // Fonctions de convenance window.logTrace = function(message) { window.logSh(message, 'TRACE'); }; window.logDebug = function(message) { window.logSh(message, 'DEBUG'); }; window.logInfo = function(message) { window.logSh(message, 'INFO'); }; window.logWarn = function(message) { window.logSh(message, 'WARN'); }; window.logError = function(message) { window.logSh(message, 'ERROR'); }; // Bouton pour ouvrir l'interface de logs window.openLogsInterface = function() { // Utiliser un chemin relatif pour fonctionner avec file:// const currentPath = window.location.pathname; const basePath = currentPath.substring(0, currentPath.lastIndexOf('/')); const logsUrl = window.location.protocol + '//' + window.location.host + basePath + '/export_logger/logs-viewer.html'; window.open(logsUrl, 'LogsViewer', 'width=1200,height=800,scrollbars=yes,resizable=yes'); }; // Initialisation (seulement si pas en mode file://) if (window.location.protocol !== 'file:') { connectToLogServer(); } else { console.log('📁 Mode file:// - WebSocket Logger désactivé'); } // Test initial window.logSh('🚀 WebSocket Logger initialisé', 'INFO'); console.log('✅ WebSocket Logger prêt - logs envoyés vers ws://localhost:8082');