4.6 KiB
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:
# 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:
# Log generale
tail -f logs/app_debug.log
# Log messaggi ricevuti
tail -f logs/rx_messages.log
Cercare Messaggi Specifici
# 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
- Controlla
tx_messages.log- i messaggi vengono inviati regolarmente? - Controlla
rx_messages.log- il radar risponde? - Verifica i timestamp - ci sono gap temporali?
Problema: Messaggi non compaiono nel Bus Monitor
- Controlla
rx_messages.log- i messaggi arrivano? - Se sì → problema nella GUI
- Se no → problema nel receiver o nella rete
Problema: Parsing errato
- Apri
udp_raw.logper vedere il pacchetto raw - Confronta con la struttura attesa del messaggio
- 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:
# 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:
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:
- Disabilita
self.debug(rimuove print sulla console) - Commenta le chiamate a
_log_rx()nel loop più frequente - 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.