SXXXXXXX_PyMsc/doc/LOGGING.md
2025-12-10 11:47:46 +01:00

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

  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:

# 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:

  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.