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

174 lines
4.6 KiB
Markdown

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