Lavoro con sistemi real-time critici per la sicurezza e la registrazione è spesso l'unico modo per catturare rari bug che si presentano una volta una luna blu ogni 53 martedì quando è una luna piena, se catturi la mia deriva. Questo tipo di ti rende ossessivo sull'argomento, quindi mi scuserò ora se comincio a fare la schiuma alla bocca. Quanto segue è stato scritto per i log di debug del codice nativo, ma la maggior parte è applicabile anche al mondo gestito ...
Usa file di registro di testo. Sembra ovvio, ma alcune persone provano a generare file di registro binari: è semplicemente stupido perché non ho bisogno di cercare uno strumento di lettura quando sono sul campo. Inoltre, se si tratta di testo e il debug è dettagliato, ci sono buone possibilità che l'ingegnere del campo possa leggere il file e diagnosticare il problema senza mai tornare da me. Tutti vincono.
Progetto sistemi in grado di registrare praticamente tutto, ma non accendo tutto per impostazione predefinita. Le informazioni di debug vengono inviate a una finestra di dialogo di debug nascosta che le timestamp e le invia in una casella di riepilogo (limitata a circa 500 righe prima dell'eliminazione) e la finestra di dialogo mi consente di interromperla, salvarla automaticamente in un file di registro o deviarla in un debugger collegato. Questa diversione mi permette di vedere l'output di debug da più applicazioni tutte ordinatamente serializzate, il che può essere un salvavita a volte. Ho usato per usare livelli di registrazione numerici (più alto è di impostare il livello, più si cattura):
off
errors only
basic
detailed
everything
ma questo è troppo inflessibile: man mano che ti avvicini a un bug, è molto più efficiente riuscire a concentrarti accedendo esattamente a ciò di cui hai bisogno senza dover guadare tonnellate di detriti e potrebbe essere un particolare tipo di transazione o operazione che causa l'errore. Se questo richiede di accendere tutto, stai solo rendendo il tuo lavoro più difficile. Hai bisogno di qualcosa di più fine.
Quindi ora sono in procinto di passare alla registrazione basata su un sistema di flag. Tutto ciò che viene registrato ha una bandiera che specifica il tipo di operazione, e c'è una serie di caselle di controllo che mi consentono di definire ciò che viene registrato. In genere tale elenco è simile al seguente:
#define DEBUG_ERROR 1
#define DEBUG_BASIC 2
#define DEBUG_DETAIL 4
#define DEBUG_MSG_BASIC 8
#define DEBUG_MSG_POLL 16
#define DEBUG_MSG_STATUS 32
#define DEBUG_METRICS 64
#define DEBUG_EXCEPTION 128
#define DEBUG_STATE_CHANGE 256
#define DEBUG_DB_READ 512
#define DEBUG_DB_WRITE 1024
#define DEBUG_SQL_TEXT 2048
#define DEBUG_MSG_CONTENTS 4096
Questo sistema di registrazione viene fornito con la versione di rilascio , attivata e salvata nel file per impostazione predefinita. È troppo tardi per scoprire che avresti dovuto registrarti DOPO che il bug si è verificato, se quel bug si verifica solo una volta ogni sei mesi in media e non hai modo di riprodurlo. La registrazione che funziona solo con build di debug è giusta. pianura. muto.
Il software viene generalmente fornito con ERROR, BASIC, STATE_CHANGE ed EXCEPTION attivati, ma questo può essere modificato nel campo tramite la finestra di dialogo di debug (o un'impostazione del registro / ini / cfg, dove queste cose vengono salvate).
Oh e una cosa: il mio sistema di debug genera un file al giorno. Le tue esigenze potrebbero essere diverse. Assicurati però che il tuo codice di debug avvii ogni file con la data, la versione del codice che stai eseguendo e, se possibile, qualche marcatore per l'ID cliente, l'ubicazione del sistema o altro. Puoi ottenere un miscuglio di file di registro che arrivano dal campo e hai bisogno di un record di ciò che è venuto da dove e quale versione del sistema erano in esecuzione che è in realtà nei dati stessi e non puoi fidarti del cliente / ingegnere sul campo per dirti quale versione hanno - potrebbero semplicemente dirti quale versione PENSANO di avere. Peggio ancora, potrebbero segnalare la versione exe presente sul disco, ma la versione precedente è ancora in esecuzione perché si sono dimenticati di riavviare dopo la sostituzione. Chiedi al tuo codice di dirti.
Infine, non vuoi che il tuo codice generi i propri problemi, quindi inserisci una funzione timer per eliminare i file di registro dopo tanti giorni o settimane (controlla la differenza tra ora e ora della creazione del file). Questo è OK per un'app server in esecuzione tutto il tempo, su un'app lato client è possibile ottenere con l'eliminazione di tutti i vecchi dati all'avvio. Generalmente eliminiamo i dati dopo circa 30 giorni, su un sistema senza frequenti visite da parte dell'ingegnere si consiglia di lasciarlo più a lungo. Ovviamente questo dipende anche dalle dimensioni dei file di registro.