2009-04-23 26 views
10

La mia domanda è semplice: cosa scrivere in un log. Ci sono delle convenzioni? Cosa devo inserire?Cosa scrivere nel file di registro?

Poiché la mia app deve essere rilasciata, mi piacerebbe avere i log amichevoli, che potrebbero essere letti dalla maggior parte delle persone senza chiedere di cosa si tratta.

Ho già alcune idee, come un timestamp, un identificatore univoco per ogni funzione/metodo, ecc. Mi piacerebbe avere diversi livelli di registro, come traccia/debug, informazioni, errori/avvisi.

Si utilizzano alcune risorse di registro preformattate?

Grazie

+2

Per quello che vale, i registri non sono normalmente intesi per essere letti dagli utenti, quindi la maggior parte delle persone cerca di renderli informativi piuttosto che "amichevoli" ... –

+2

@David: Cosa? La maggior parte dei log viene letta dagli amministratori, che sono una classe di utenti. Non sei sicuro di cosa stai parlando. "Amichevole" per un amministratore di solito significa "Completa" - timbro data, id di sessione, nome modulo, livello di gravità, un messaggio che si adatta su una riga, ecc. –

+0

amichevole significa qui che il formato del registro sarà facile da analizzare, leggere, e offrire la possibilità a qualsiasi utente (come un utente corrente o un amministratore) di avere con la maggior parte degli strumenti informazioni pertinenti sull'app –

risposta

9

Ecco alcuni suggerimenti per i contenuti:

  • timestamp
  • messaggio
  • log tipo di messaggio (come ad esempio l'errore, di avvertimento, tracce, debug)
  • ID thread (in modo da poter dare un senso al file di registro da un'applicazione a thread multipli)

Best practice per l'implementazione:

  • mettere un mutex attorno al metodo di scrittura in modo che si può essere sicuri che ogni scrittura è thread-safe e avrà senso.
  • Inviare 1 messaggio alla volta al file di registro e specificare il tipo di messaggio di registro ogni volta. Quindi è possibile impostare il tipo di registrazione che si desidera eseguire all'avvio del programma.
  • Non utilizzare il buffering sul file o lo svuotamento frequente in caso di arresto anomalo del programma.

Edit: Ho appena notato la questione è stato taggato con Python, in modo da vedere la risposta di S. Lott prima del mio. Potrebbe essere sufficiente per le tue esigenze.

+0

Ho accettato questa risposta, perché sta rispondendo alle mie attese, anche se il collegamento fornito da S.Lott è stato utile. Grazie –

18

È abbastanza piacevole e già implementato.

Leggi questo: http://docs.python.org/library/logging.html


Modifica

"facile da analizzare, leggere," sono generalmente caratteristiche contraddittorie. Inglese: facile da leggere, difficile da analizzare. XML: facile da analizzare, difficile da leggere. Non esiste un formato che sia facile da leggere e facile da analizzare. Alcuni formati di log sono "non orribili da leggere e non impossibili da analizzare".

Alcune persone creano più gestori in modo che un registro abbia diversi formati: un riepilogo per le persone da leggere e una versione XML per l'analisi automatica.

1

Poiché hai codificato la tua domanda python, ti rimando allo this question. Per quanto riguarda il contenuto, la proposta di Brian è buona. Ricorda tuttavia di aggiungere il nome del programma se stai utilizzando un log condiviso.

La cosa importante di un file di registro è "greppability". Cerca di fornire tutte le tue informazioni in una singola riga, con identificatori di stringhe appropriati che sono unici (anche in radix) per una particolare condizione. Per quanto riguarda il timestamp, utilizzare lo standard ISO-8601 che ordina correttamente.

0

timeStamp cioè DateTime AAAA/MM/DD: HH: MM: SS: ms utente ID thread funzione Nome Messaggio/Messaggio di errore/Successo Messaggio/funzione Trace

hanno questo in formato XML voi e può quindi facilmente scrivere un parser per questo.

<log> 
    <logEntry DebugLevel="0|1|2|3|4|5...."> 
    <TimeStamp format="YYYY/MM/DD:HH:mm:ss:ms" value="2009/04/22:14:12:33:120" /> 
    <ThreadId value="" /> 
    <FunctionName value="" /> 
    <Message type="Error|Success|Failure|Status|Trace"> 
     Your message goes here 
    </Message> 
    </logEntry> 
</log> 
+3

Alcune persone pensano che XML sia la risposta a tutto (così fanno alcuni regex bod) ma non sono d'accordo. È altrettanto facile (possibilmente più semplice) analizzare un file di registro in formato fisso con normali strumenti di elaborazione del testo rispetto a un file XML. E non si finisce con tutto quel "rumore" nel file che occupa spazio inutile. – paxdiablo

+0

Alcuni pplz pensano ai loro pensieri che decidono cosa è giusto e cosa no. Non si può essere d'accordo, ma non prova nulla. E dal modo in cui alcuni pplz sono qui solo per imporre la loro autorità per loro, suggerisco che è tempo per noi di imparare a rispettare e dare spazio agli altri. Qualche soluzione del tempo potrebbe non essere altrettanto importante della partecipazione. –

+0

Devo ammettere che non mi piace molto XML, è un'opinione personale, e ti ringrazio per la proposta, ma mi sento più a mio agio con un semplice file di testo che con file xml disordinati, che dicevano, sono d'accordo in alcuni caso è utile, soprattutto nelle applicazioni web. –

1

Una buona idea è guardare il software di analisi del registro. A meno che non si preveda di scrivere il proprio, probabilmente si vorrà sfruttare un pacchetto di analisi del log esistente come Analog. In questo caso, probabilmente si vorrà generare un output di registro che sia abbastanza simile ai formati che accetta. Ti permetterà di creare grafici e grafici carini con il minimo sforzo!

1

A mio parere, l'approccio migliore è utilizzare librerie di registrazione esistenti come log4j (or it's variations for other languages). Ti dà il controllo su come i tuoi messaggi sono formattati e puoi cambiarli senza mai toccare il tuo codice. Segue le best practice, robuste e utilizzate da milioni di utenti. Naturalmente, puoi scrivere il tuo framework di registrazione, ma sarebbe una cosa molto strana da fare, a meno che tu non abbia bisogno di qualcosa di molto specifico. In ogni caso, segui la loro documentazione e vedi come vengono presentate le dichiarazioni del registro.

Partenza log4py - Python portato versione di log4j, penso che ci sono diverse implementazioni per Python là fuori ..

0

biblioteca registrazione di Python sono thread-safe per i thread singolo processo.

Problemi correlati