# Cabinet Digital Signage - Logging System ## 📋 Übersicht Dieses erweiterte Logging-System ermöglicht es dir, alle Fehler und Events von den Android-Displays remote zu ĂŒberwachen, ohne physischen Zugriff auf die GerĂ€te zu benötigen. ## 🎯 Features ### Automatisches Logging von: - ✅ **JavaScript-Fehler** (Runtime Errors) - ✅ **Unhandled Promise Rejections** (async/await Fehler) - ✅ **Console Errors & Warnings** - ✅ **Resource Loading Failures** (Videos, Bilder) - ✅ **Video Playback Errors** (mit Media Error Codes) - ✅ **Network Status** (Online/Offline Events) - ✅ **Video Stalling** (Buffering-Probleme) - ✅ **Configuration Loading** (API-Fehler) - ✅ **Heartbeat** (alle 5 Minuten - zeigt dass Display lĂ€uft) ### Log-Levels: - `FATAL` - Kritische JavaScript-Fehler - `ERROR` - Fehler (Video-Loading, Network, etc.) - `WARNING` - Warnungen (Buffering, Connection Lost) - `INFO` - Informationen (Heartbeat, Video Started, Config Loaded) ## 📂 Dateistruktur ``` public/_cabinet/ ├── index.html # Haupt-Display-Datei (mit Logging) ├── logger.php # Backend-Endpoint fĂŒr Logs ├── view-logs.php # Web-Interface zum Ansehen der Logs ├── logs/ # Log-Verzeichnis (wird automatisch erstellt) │ ├── all_2026-01-19.log # Alle Logs des Tages │ ├── error_2026-01-19.log # Nur Errors │ ├── fatal_2026-01-19.log # Nur Fatal Errors │ ├── warning_2026-01-19.log # Nur Warnings │ ├── info_2026-01-19.log # Nur Info │ └── json_2026-01-19.log # JSON Format (fĂŒr Parsing) └── LOGGING_README.md # Diese Datei ``` ## 🚀 Setup ### 1. Logs-Verzeichnis erstellen (falls nicht automatisch erstellt) ```bash mkdir -p public/_cabinet/logs chmod 755 public/_cabinet/logs ``` ### 2. PHP-Konfiguration (falls nötig) Stelle sicher, dass PHP Schreibrechte auf das `logs/` Verzeichnis hat: ```bash chown -R www-data:www-data public/_cabinet/logs # ODER chmod 777 public/_cabinet/logs # Nur fĂŒr Development! ``` ### 3. Logs ansehen Öffne im Browser: ``` https://cabinet.b2in.eu/view-logs.php ``` ## 📊 Log-Viewer Features Der `view-logs.php` bietet: - 📈 **Statistiken** (Anzahl Fatal/Error/Warning/Info) - 🎹 **Farbcodierung** nach Log-Level - 🔍 **Dateiauswahl** (verschiedene Log-Dateien) - ⚡ **Auto-Refresh** (alle 10 Sekunden) - 📏 **Zeilenanzahl** wĂ€hlbar (50/100/500/1000/alle) ## 🔒 Sicherheit **WICHTIG:** Der Log-Viewer sollte in Produktion geschĂŒtzt werden! ### Option 1: .htaccess Passwortschutz ```apache # In public/_cabinet/.htaccess AuthType Basic AuthName "Restricted Access" AuthUserFile /pfad/zu/.htpasswd Require valid-user ``` ### Option 2: PHP Session-basiert FĂŒge am Anfang von `view-logs.php` hinzu: ```php ``` ## 📝 Kontext-Informationen Jeder Log-Eintrag enthĂ€lt automatisch: - **Timestamp** (ISO 8601) - **IP-Adresse** des Displays - **User Agent** (Browser/OS Info) - **Viewport** (Display-Auflösung) - **Connection Status** (online/offline) - **Aktuelles Video** (Dateiname) - **Video Index** (Position in Playlist) - **Footer Index** (Aktueller Footer-Content) - **Playlist-LĂ€nge** (Anzahl Videos) ## 🎼 Manuelle Logs Du kannst auch manuell Logs aus dem JavaScript senden: ```javascript // Info Log window.displayLogger.log('Meine Info-Nachricht', { customData: 'wert' }); // Warning window.displayLogger.warn('Warnung', { reason: 'Irgendwas ist komisch' }); // Error window.displayLogger.error('Fehler aufgetreten', { errorCode: 123 }); // Kontext setzen window.displayLogger.setContext('customKey', 'customValue'); ``` ## 🔄 Log-Rotation Logs werden automatisch rotiert: - Separate Dateien pro Tag - Automatische Löschung von Logs Ă€lter als 30 Tage - Verschiedene Dateien pro Log-Level ## đŸ“± Debugging-Workflow 1. **Problem entdeckt** → Öffne `view-logs.php` 2. **WĂ€hle Log-Datei** → z.B. `error_2026-01-19.log` 3. **Schaue Statistiken** → Wie viele Fehler pro Level? 4. **Analysiere Logs** → Welches Video? Welcher Footer? Welche IP? 5. **Problem beheben** → Update CMS oder Code 6. **Monitoring** → Aktiviere Auto-Refresh zum Live-Monitoring ## 🐛 HĂ€ufige Fehlertypen ### MEDIA_ERR_NETWORK (Code 2) - **Ursache:** Netzwerkprobleme beim Video-Laden - **Lösung:** PrĂŒfe Internetverbindung, Video-URL, Server-Erreichbarkeit ### MEDIA_ERR_DECODE (Code 3) - **Ursache:** Video-Codec nicht unterstĂŒtzt oder Datei korrupt - **Lösung:** Video neu encodieren (H.264, AAC) ### MEDIA_ERR_SRC_NOT_SUPPORTED (Code 4) - **Ursache:** Video-Format nicht unterstĂŒtzt - **Lösung:** Format zu MP4/WebM Ă€ndern ### Promise Rejection - **Ursache:** Async-Fehler (meist API-Calls) - **Lösung:** PrĂŒfe API-Endpoint, CORS-Settings ### Stalled Video - **Ursache:** Buffering-Probleme - **Lösung:** Video-Bitrate reduzieren, Netzwerk prĂŒfen ## 💡 Best Practices 1. **RegelmĂ€ĂŸig Logs checken** - Mindestens 1x pro Woche 2. **Statistiken beachten** - Viele Errors/Warnings? → Aktion nötig 3. **Heartbeat ĂŒberwachen** - Kommt alle 5 Min? Display lĂ€uft 4. **JSON-Logs fĂŒr Analyse** - Nutze `json_*.log` fĂŒr automatische Auswertung 5. **Log-Level richtig nutzen**: - `FATAL` → Sofort reagieren - `ERROR` → Zeitnah prĂŒfen - `WARNING` → Im Auge behalten - `INFO` → FĂŒr Debugging ## 🔗 Integration mit Monitoring-Tools Die JSON-Logs können einfach in Monitoring-Tools integriert werden: ```bash # Alle Fatal Errors der letzten 24h grep '"level":"FATAL"' public/_cabinet/logs/json_*.log # Errors nach IP gruppieren jq -r '.ip' public/_cabinet/logs/json_*.log | sort | uniq -c # HĂ€ufigste Fehler jq -r '.message' public/_cabinet/logs/json_*.log | sort | uniq -c | sort -rn ``` ## 📞 Support Bei Fragen oder Problemen: 1. PrĂŒfe die Logs in `view-logs.php` 2. Schaue dir die Kontext-Informationen an 3. PrĂŒfe ob andere Displays gleichen Fehler haben 4. Kontaktiere den Support mit Log-Auszug --- **Version:** 1.2 **Letztes Update:** 2026-01-19