2015-08-18 10 views
9

Voglio comprendere le basi di una libreria di registrazione.Qual è il significato e lo scopo di una libreria di registrazione?

  1. Qual è esattamente lo scopo di una libreria di registrazione? Capisco che un log è fondamentalmente informazioni sul processo della tua applicazione durante l'esecuzione. Un modo per farlo è scrivere direttamente le informazioni in un file.
  2. Qual è lo scopo della progettazione di una libreria dedicata come glog per la registrazione? La mia comprensione della registrazione è corretta o devo cambiarla? Qualcuno può dare un esempio pratico per mostrare l'importanza dell'uso di una libreria di logging?
  3. Quali caratteristiche dovrebbero essere considerate mentre si sceglie una libreria di registrazione?
  4. Come può essere impiegato efficacemente il logging durante le implementazioni?
+3

Registrazione: è tutto utile che riduce il dolore percepito durante le sessioni di debug di 3am. L'utilizzo di una libreria standard consente di sfruttare i precedenti e le scelte progettuali adottate dagli autori esperti. – Bathsheba

+2

Scrittura di dati strutturati coerenti, tolleranti ai guasti su un singolo target in modo thread-safe usando efficiente io può essere non banale ... –

+0

Per un principiante sarebbe utile ottenere una risposta più dettagliata o almeno un collegamento che spieghi i problemi chiaramente. –

risposta

12

Le informazioni di registrazione durante l'esecuzione della tua applicazione possono aiutarti a capire cosa ha portato a un bug oa un crash, offrendoti più contesto di quello ottenuto semplicemente da un rapporto di crash, stack di chiamate o persino un minidump. Ciò è particolarmente importante quando ricevi segnalazioni di bug o arresti anomali da persone che non sono sviluppatori e che non sono in esecuzione in un debugger, né utenti finali/clienti né non sviluppatori del tuo team.

Il mio background è nei giochi e la registrazione può essere particolarmente utile con i giochi per alcuni motivi. Uno è che molti problemi possono riguardare le specifiche dell'hardware su un sistema in modo tale da registrare le informazioni come il tipo di GPU che l'utente ha, quale versione del driver grafico sono in esecuzione, ecc. Può essere essenziale per il debug di problemi che si manifestano solo su un configurazione specifica. Un altro è che i giochi hanno un aspetto di simulazione in cui lo stato del gioco si evolve nel tempo in risposta all'input dell'utente combinato con la simulazione di cose come la fisica, l'intelligenza artificiale e le regole del gioco. Capire cosa stava succedendo durante l'esecuzione di un crash o bug aiuta a capire come riprodurlo e può dare indizi preziosi alla causa principale del problema.

Una libreria di registrazione aggiunge funzionalità utili per la registrazione e va oltre quanto disponibile da una semplice stampa. Questo include cose come:

  • La possibilità di controllare la quantità di registrazione in base a fattori come il debug vs. build di rilascio e le impostazioni di runtime come una bandiera verbose.
  • Il concetto di "canali" che può essere abilitato, disabilitato o impostato su una particolare verbosità. Ad esempio, per eseguire il debug di un problema di grafica, è possibile che il canale "grafica" sia impostato su massima verbosità, mentre si disattivano i canali "rete" e "audio".
  • Un back-end flessibile che va dalla registrazione a un file locale su disco per accedere a un database remoto su una rete.
  • Filetto di sicurezza in modo che la registrazione si comporti da sola quando potenzialmente si registra simultaneamente da più thread diversi.
  • Codifica automatica delle voci di registro con un timestamp e qualsiasi altra informazione pertinente (canale, livello di dettaglio, ecc.).

Per quanto riguarda come fare uso di una libreria di registrazione, che è un po 'dipende dalla vostra applicazione, ma ecco alcuni suggerimenti generali:

  • fare buon uso di canali e livelli di dettaglio se la libreria di registrazione fornisce loro (e dovrebbe). Ciò ti aiuterà a gestire ciò che può diventare un volume molto grande di messaggi di registro man mano che l'applicazione cresce.
  • Se si verifica una condizione imprevista ma non fatale e la si gestisce, registrare alcune informazioni a riguardo in caso di problemi imprevisti in seguito.
  • All'avvio dell'applicazione, registrare tutte le informazioni che potrebbero tornare utili per riprodurre errori rari in seguito se si riceve un bug o un rapporto di arresto anomalo da un cliente. Err sul lato di troppe informazioni, non si sa mai cosa potrebbe essere utile in anticipo. Ciò potrebbe includere cose come tipo di CPU, modello di GPU e versione del driver, memoria disponibile, versione del sistema operativo, spazio disponibile sul disco rigido, ecc.
  • Transizioni dello stato della chiave di registro in modo da poter tenere traccia dello stato dell'applicazione e del modo in cui è arrivato quando stai eseguendo il debug di un problema.
+1

Questo è molto utile. Grazie mille. –

+0

Questa è una risposta eccellente, ma @UjjwalAryan, dovresti anche imparare come usare i file pdb durante il debug. – Bathsheba

+0

Sì. Io uso GNU debugger. Ma stavo leggendo il codice sorgente di un altro progetto open-source e ho trovato l'uso della libreria glog che è stata ampiamente utilizzata. Non sono riuscito a trovare alcuna informazione online sull'uso di tali librerie e su come possano essere impiegate in modo efficiente. Quindi, ho fatto la domanda. Non so perché questo è stato contrassegnato come troppo ampio. Non ci sono risorse online su questo e sfortunatamente la maggior parte dei programmatori in erba affrontano problemi con domande di base. –

2

Un sacco di programmi utilizzano una sorta di registrazione e non ha molto senso reinventare la ruota ogni volta, anche se il codice è relativamente semplice.

Anche altre librerie possono utilizzare la libreria di registrazione, quindi invece di dover configurare i file di registro per ogni libreria che si include in un progetto, è sufficiente configurare la libreria di registrazione. Ciò significa anche che eventuali bug che potrebbero apparire nel codice di registrazione possono essere corretti sostituendo semplicemente una libreria invece di dover sostituire più librerie.

Infine, rende il codice più facile da leggere per altri sviluppatori perché non è necessario capire come è stata implementata la registrazione personalizzata.