Logy.

Logging non ortodosso per Python
Scarica ora

Logy. Classifica e riepilogo

Annuncio pubblicitario

  • Rating:
  • Licenza:
  • BSD License
  • Prezzo:
  • FREE
  • Nome editore:
  • Michal Hordecki
  • Sito web dell'editore:
  • http://github.com/MHordecki

Logy. Tag


Logy. Descrizione

Registrazione non ortodossa per Python LogPy è un'alternativa per Python strutture di registrazione standard, liberamente ispirato log5 di Lisp. Si basa su principi Kiss - quindi ho voluto che fosse come più trasparente come differenza principale possible.The rispetto alla registrazione di stdlib è l'architettura basato su tag. In registrazione, ogni registro ha assegnato un certo livello (sia esso di debug, errore, ecc). È tutto. LogPy, d'altra parte, i tag di sport - è possibile collegare le stringhe brevi a ciascun messaggio. Tag può rappresentare varietà di cose: livello di gravità, nome del modulo, o qualche log personalizzato categorization.LogPy richiede Python 2.6 o superiore. Funziona senza problemi su Python 3 troppo (in realtà, è sviluppato con py3k in mente e poi backported a Python 2.6) .Getting startedUsing LogPy è morto semplice: da importazione logpy LogPyimport syslog = LogPy () log.add_output (sys.stderr.write ) log ( 'debug') ( 'Ciao mondo!') Voila! casi LogPy sono callable. Per emettere un registro, registro delle chiamate "due volte" - in prima convocazione passare tutti i tag del registro, e tutto passato al secondo sarà considerato una parte del messaggio. L'output esempio volontà registra al standard error. Facile, non è sotto il hoodLogPy ha un paio di livelli di astrazione:? 1. LogPy - accetta i dati da parte dell'utente, li combina in un'istanza di messaggio e li passa verso il basso per tutte le uscite. 2. Uscita - filtra i messaggi in base ad alcune condizioni predefinite, e se il messaggio li passa, è formattato dal Formatter e poi passò alla produzione effettiva. 3. Formatter - prende messaggio e formatta;) (in implementazione standard utilizza String.Format per il lavoro). 4. uscita effettiva - un callable che, ad esempio, emette l'uscita del Formatter al screen.All quegli strati / oggetti sono callables.Common tasksOutput filteringWith uscite multiple, probabilmente avrete bisogno di filtrare alcuni registri in ciascuno di essi. V'è il supporto per questo: log = LogPy () log.add_output (my_output, filter = lambda m: 'l'errore' in m.tags) # Equivalente a: log.add_output (my_output, filter = ) come si può vedere, i filtri sono callable, prendendo oggetto del messaggio come un argomento e ritorno bool. filtri multipli possono essere forniti da un list.Custom formattingYou può personalizzare la formattazione da una sostituzione della stringa di formato o sostituendo tutto l'oggetto formattazione. uno il formato choice.Custom stringThis soddisferà il 90% delle vostre esigenze. È possibile modificare la stringa di formato con argomento chiave al metodo add_output di LogPy (possibile anche quando istanziare direttamente oggetti di uscita): log.add_output (..., formattatore = 'la mia stringa di formato personalizzato!') Durante l'elaborazione di un messaggio, formato di metodo della stringa sarà chiamato con i seguenti, argomenti predefiniti: data * - datetime oggetto * tag - elenco delimitato da spazi di tag (stringa) * args - elenco di argomenti nel messaggio * kwargs - dict di argomenti a parola chiave nel messaggio * la comunicazione - l'oggetto del messaggio. Tutti gli argomenti di cui sopra sono in realtà solo uno zucchero sintattico, in quanto sono tutti gli attributi di questa object.Default sguardi stringa formato come questo: {data}: {tag}: {args} {kwargs} \ nNon dimenticare di mettere una nuova riga alla il finale, o il vostro log guarderanno crippled.Working con più modulesYou possono aiutare se stessi durante l'utilizzo di LogPy con più moduli predefinendo alcuni dei tag: # principale modulelog = LogPy () # Bambino moduleimport mainmodulelog = mainmodule.log ( 'modulo: childmodule ', curry = true) # Ora: log ( '! debug') ( 'Ciao mondo') # è tolog equivalente ( 'modulo: childmodule', 'debug') ( 'Ciao mondo') formato su misura caso objectIn si desidera che il piena potenza - si può sbarazzarsi di quello predefinito formattatore: log.add_output (..., formattatore = my_formatter_object) formatter oggetti devono essere conformi al protocollo semplice: classe formatter: def __call __ (messaggio: messaggio) -> someting ragionevole: messaggio passclass : tag = set (str) args = [] # approvata dal kwargs utente = {} # approvata dalla data di utente = datetime.datetime (non ho idea wh atsoever se c'è standard di notazione formale per descrivere i protocolli in Python oltre le cose come zope.interface. Spero che le mie divagazioni sono chiari) in cui qualcosa mezzi ragionevoli:. Tutto ciò che verrà accettato dal uscita del Output (suoni un pò sciocco) - di solito significa str, ma non di uscita always.Custom Objectif siete disposti a rottami del 50% della LOC di LogPy, sentitevi liberi di farlo: log.add_raw_output (my_customized_output_object) Degno di nota è il fatto che LogPy.add_output è solo un wrapper per: log.add_output (...) # equivalente tolog.add_raw_output (Output (. ..)) sguardi di protocollo di uscita come segue: classe di potenza: def __call __ (messaggio: messaggio): passin altre parole: sarete chiamati a ogni log rilasciata dal user.Note programma: i messaggi trattare come oggetti immutabili - stanno essendo riutilizzati per tutti Outputs.Thread safetyLogPy impiega alcuni sicurezza di base del filo; un threading.Lock viene utilizzato in __call__ metodo LogPy. Può essere facilmente sostituita: da import threading RLocklog = LogPy () = log.lock RLock () Requisiti: · Python.


Logy. Software correlato

bifilo

Modulo per la lettura / scrittura di un numero arbitrario di bit da un file ...

144

Scarica