Registrazione dettagliata o concisa [duplicato]

3

Mi chiedevo quanti dati dovrebbero essere registrati.

So che questo dipende profondamente da molteplici fattori. Ma può ancora essere difficile trovare la via di mezzo dorata.

Diciamo che ho un'applicazione in cui le persone possono creare e amministrare un utente. Inoltre sono in grado di creare / leggere / aggiornare / eliminare altri oggetti all'interno dell'applicazione.

Se l'applicazione ha molti utenti può essere un problema se vengono registrati troppi dati. Se tutte le classi DTO e il loro contenuto vengono registrati ogni volta che un utente o qualsiasi altro oggetto viene modificato / eliminato / ecc. i registri potrebbero diventare estremamente grandi. Ma se si registra solo una piccola riga che dice "Utente 'blabla' è stato creato / modificato / ecc." potresti avere problemi nel debugging o nella ricreazione di bug poiché non hai lo stato esatto degli oggetti quando si è verificato l'errore.

Dove lavoro attualmente raramente registriamo i dati, ma registriamo i messaggi di errore e impiliamo le tracce, ma ho anche lavorato in precedenza in luoghi in cui hanno registrato ogni singolo bit di informazioni che può essere utile in uno scenario di debug futuro.

Mi stavo chiedendo cosa fanno le altre persone e pensiamo a questo? Quanti dati si registrano per le informazioni di debug future? - esiste una quantità "corretta" di dati registrati?

    
posta Herter 02.12.2013 - 13:45
fonte

2 risposte

0

Suppongo che tu stia utilizzando un tipo di utility di registrazione di terze parti che supporta più livelli di registrazione che possono essere modificati senza dover ricompilare il codice sorgente (come Log4J o SLF4J). Se non lo sei, fai un favore a te stesso e implementalo ... ieri.

Un buon schema di registrazione dovrebbe consentire di diagnosticare la causa principale di qualsiasi problema senza ricompilare il codice . Ovviamente, il solo logging dello stack trace non ti darà molto contesto. D'altra parte, la registrazione di ogni passaggio logico uccide le prestazioni delle applicazioni e consuma un sacco di spazio su disco. Il trucco è di impostare i registri predefiniti sulla quantità minima di dettagli, ma concediti la possibilità di aumentare il livello di registrazione in caso di problemi.

Per l'elaborazione normale, la quantità minima di registrazione necessaria è probabilmente la migliore per accedere al livello INFO. Pensa a questo come un sommario in un libro: non ti racconterà la storia, di per sé, ma ti darà un'idea su dove cercare e trovare quello che vuoi. Registrare i passaggi, i servizi o le classi di processo di alto livello con messaggi informativi generici come "Avvio processo di convalida" o "Recupero dati query", ma utilizzare questo livello di messaggio con parsimonia (o non del tutto) nei servizi di livello inferiore, classi o funzioni per evitare confusione.

Uso i messaggi DEBUG più come i breadcrumb. Se il livello INFO ha fatto il suo lavoro, allora dovrei avere una buona idea di quale processo si sia interrotto. Da lì, dovrei essere in grado di attivare il livello DEBUG e capire quale classe ha avuto l'azione incriminata. Per garantire ciò, mi assicuro di registrare un messaggio di livello DEBUG su ogni voce e punto di uscita per ogni metodo in ogni classe . In ingresso, registro il nome del metodo, i nomi dei parametri formali e i valori passati per ciascuno di questi parametri. All'uscita, registro nuovamente il nome del metodo e fornisco il nome e il valore di ogni variabile restituita o dichiaro che il metodo non restituisce nulla.

Se sono necessari ulteriori dettagli, è possibile attivare il livello TRACE per la classe che causa l'errore. La registrazione del livello di traccia dovrebbe consentire di seguire ogni passaggio logico della classe, quasi come se si passasse attraverso il codice utilizzando un debugger. Tieni presente che nella maggior parte delle applicazioni live non avrai il lusso di usare un debugger, quindi il livello di TRACE è spesso il più vicino possibile a quel livello di feedback. Naturalmente, questo è anche il livello di registrazione più noioso e, nella mia esperienza, il più spesso trascurato. Nella registrazione TRACE, provare almeno a includere i punti critici critici nel metodo (tutti i percorsi nelle istruzioni condizionali, i puntatori nei loop, ecc.) Per consentire all'utente di seguire il percorso che l'applicazione ha intrapreso verso la sua scomparsa.

Tornando all'esempio, una classe DTO è ciò che considererei un codice piuttosto basso. Probabilmente non hai bisogno di alcuna registrazione a livello di INFO qui, ma DEBUG sui punti di entrata / uscita dovrebbe essere aggiunto insieme al log di TRACE per qualsiasi processo di elaborazione delle chiavi o eventi decisionali nel DTO. Quindi, assicurati di impostare il livello di registrazione sul DTO su INFO in modo che questi eventi non vengano registrati normalmente.

Un paio di altri suggerimenti: - Registrazione predefinita al livello INFO - Assicurati di utilizzare un appender scorrevole per registrare l'output in più file anziché in un file enorme. - Output, al minimo, TIMESTAMP, CLASS, THREAD, LINE NUMBER gli appendici del log - Quando si aggiungono i messaggi DEBUG che registrano i valori delle variabili, tenere presente che il metodo to_string () di molte classi non viene sovrascritto in modo da non ottenere risultati utili. Prova a utilizzare il metodo statico ReflectionToStringBuilder.toString (Oggetto dell'oggetto).

    
risposta data 03.12.2013 - 02:20
fonte
1

Stavo eseguendo il debug di un'applicazione che trasmetteva dati video in streaming ... la registrazione era insufficiente per diagnosticare un problema particolarmente fastidioso (anche se il problema era facile una volta trovato), quindi abbiamo dovuto inserire il codice di riproduzione del video .. yup, 25 (o così) registra le chiamate al secondo.

Quindi il tuo problema non sarà mai "quanto poco loggaggio posso farla franca", ma "come posso gestire quantità veramente massicce di logging così da ricavarne informazioni utili". La gestione di anche piccole quantità di dati di registro è lo stesso problema, quindi concentrati su ciò, cioè assicurandoti di poter abilitare sezioni di registrazione o stampare parti in modo che possano essere chiaramente identificate in una massa di altre, inutile, informazioni sul registro.

Registro sempre molti dati e li controllo anche. Una volta che il codice lascia le tue mani e viene installato su un sito del cliente, e tutto ciò che possono aiutarti a diagnosticare un problema sono i file di log, non puoi tornare indietro e aggiungere più logging per individuare il bit che è andato storto.

    
risposta data 03.12.2013 - 00:05
fonte

Leggi altre domande sui tag