# Sistema di Logging PyMsc ## Panoramica L'applicazione PyMsc genera automaticamente file di log dettagliati che si **azzerano ad ogni avvio**. Tutti i log vengono salvati nella cartella `logs/` nella root del progetto. ## File di Log Generati ### 1. `app_debug.log` **Log generale dell'applicazione** Contiene: - Eventi di avvio/arresto dell'applicazione - Inizializzazione del radar - Attivazione trasmissione periodica - Errori e warning generali Esempio: ``` [10:30:15.123] Application started [10:30:16.456] === RADAR INITIALIZATION STARTED === [10:30:17.789] Enabling periodic message transmission... [10:30:18.012] === RADAR INITIALIZATION COMPLETE === ``` ### 2. `rx_messages.log` **Log dei messaggi ricevuti dal radar** Contiene: - Notifica di ricezione pacchetto UDP - Dettagli di ogni messaggio decodificato (label, direzione, contenuto) - Payload hex per debug avanzato Esempio: ``` [10:30:20.123] Received 126 bytes from 127.0.0.1:51553 [10:30:20.124] B7 RT->BC - CW(sa=17,rt=20,wc=27) SW=0x0000 ERR=0x0000 Decoded (54 bytes) [10:30:20.125] Payload hex: 00 00 00 00 01 02 03 04 ... ``` ### 3. `tx_messages.log` **Log dei messaggi inviati al radar** Contiene: - Messaggi di inizializzazione inviati - Frame periodici inviati con lista messaggi Esempio: ``` [10:30:17.100] INIT: A1 (Settings) sent - history=LEVEL_04, intensity=127 [10:30:20.000] Sending frame with messages: A4, A5 [10:30:20.040] Sending frame with messages: A2 ``` ### 4. `udp_raw.log` **Log raw dei pacchetti UDP** Contiene: - Timestamp completo - Indirizzo IP e porta sorgente - Dump esadecimale completo del pacchetto Esempio: ``` 2025-12-05 10:30:20 127.0.0.1:51553 53150342000000003c3c... ``` Utile per: - Analisi offline con Wireshark - Debug di problemi di parsing - Validazione protocollo ## Utilizzo ### Visualizzare i Log Durante l'Esecuzione **Windows PowerShell:** ```powershell # Log generale Get-Content -Path logs\app_debug.log -Wait # Log messaggi ricevuti Get-Content -Path logs\rx_messages.log -Wait # Log messaggi inviati Get-Content -Path logs\tx_messages.log -Wait ``` **Linux/Mac:** ```bash # Log generale tail -f logs/app_debug.log # Log messaggi ricevuti tail -f logs/rx_messages.log ``` ### Cercare Messaggi Specifici ```powershell # Cerca tutti i messaggi B7 Select-String -Path logs\rx_messages.log -Pattern "B7" # Cerca errori Select-String -Path logs\app_debug.log -Pattern "ERROR" # Conta quanti messaggi A1 sono stati inviati (Select-String -Path logs\tx_messages.log -Pattern "A1").Count ``` ### Analizzare Problemi **Problema: Radar si disconnette** 1. Controlla `tx_messages.log` - i messaggi vengono inviati regolarmente? 2. Controlla `rx_messages.log` - il radar risponde? 3. Verifica i timestamp - ci sono gap temporali? **Problema: Messaggi non compaiono nel Bus Monitor** 1. Controlla `rx_messages.log` - i messaggi arrivano? 2. Se sì → problema nella GUI 3. Se no → problema nel receiver o nella rete **Problema: Parsing errato** 1. Apri `udp_raw.log` per vedere il pacchetto raw 2. Confronta con la struttura attesa del messaggio 3. Verifica marker e dimensioni ## Rotazione dei Log I log vengono **azzerati automaticamente** ad ogni avvio dell'applicazione. Questo significa: - ✅ Log sempre freschi e rilevanti per la sessione corrente - ✅ Nessun file di log gigante da gestire - ⚠ I log della sessione precedente vengono persi Se vuoi conservare i log: ```powershell # Backup manuale prima di riavviare Copy-Item logs\*.log logs\backup\session_$(Get-Date -Format 'yyyyMMdd_HHmmss') ``` ## Disabilitare il Debug Verboso Per ridurre l'output sulla console (ma mantenere i log su file): Nel file `app_controller.py`, cambia: ```python self.debug = False # Era: self.debug = True ``` Questo disabilita i print `[RX]`, `[QUEUE]`, etc. ma **mantiene tutti i log su file**. ## Performance Il sistema di logging è progettato per essere efficiente: - **Scrittura asincrona** - non blocca il receiver - **Buffer automatico** - il sistema operativo gestisce il buffering - **Impatto minimo** - < 1ms per log entry Se noti problemi di performance: 1. Disabilita `self.debug` (rimuove print sulla console) 2. Commenta le chiamate a `_log_rx()` nel loop più frequente 3. Considera di loggare solo ogni N messaggi ## Troubleshooting ### "Permission denied" all'avvio La cartella `logs/` potrebbe essere protetta. Esegui con permessi amministratore o cambia la cartella. ### File di log vuoti Verifica che il metodo `_setup_logging()` venga chiamato correttamente all'avvio. ### Log troppo grandi Impossibile con il sistema attuale (azzera ad ogni avvio), ma se modifichi il codice per usare append, considera di implementare log rotation.