Twiggy

Software skärmdump:
Twiggy
Mjukvaruinformation:
Version: 0.4.4
Ladda upp dagen: 11 May 15
Utvecklare: Peter Fein
Licens: Gratis
Popularitet: 1

Rating: nan/5 (Total Votes: 0)

Twiggy är ett tidigt stadium projekt för att bygga en mer pythonic loggning paket.
Användning:
Gör display arbete:
>>> import sys; sys.stderr = sys.stdout
Installationen är enkel
I din main.py:
>>> Import twiggy
>>> Twiggy.quick_setup ()
Timmer meddelanden
>>> Från twiggy import *
Huvud gränssnitt är den magiska loggen:
>>> Logga #doctest: + ELLIPS

Det fungerar ur lådan, med hjälp av standardklasser:
>>> Log.debug ("Du kanske inte bryr sig")
DEBUG: Du kanske inte bryr sig
>>> Log.error ("OMFG! Byxor i brand!")
FEL: OMFG! Byxor i brand!
Den stöder en mängd olika formatsträngar, försumliga nya stil:
>>> Log.info ("jag bär {0} på min {där}", "byxor", där = "ben")
INFO: Jag bära byxor på benen
Gammal stil fungerar bra men:
>>> Log.options (style = "procent"). Info ("Jag gillar% s", "cyklar")
INFO: Jag gillar cyklar
Som gör mallar:
>>> Log.options (style = "dollar). Info ($ vad döda", vad = "Bilar")
INFO: Bilar döda
Du kan namnge dina loggers:
>>> Mylog = log.name ('alfredo')
>>> Mylog.debug ("hej")
DEBUG: alfredo: hej
Men namnet har något samband med föremålet; det är bara för humant bruk:
>>> Mylog är log.name ("alfredo ')
Falsk
avger meddelanden
Sändare är löst kopplade:
>>> Twiggy.emitters #doctest: + ELLIPS
{'*': }
Du kan ställa in en min_level på Emitters:
>>> twiggy.emitters ['*']. min_level = twiggy.Levels.INFO
>>> Log.debug ("Hjälp, hjälp jag blir undertryckt")
>>> Log.info ("Jag är inte helt död ännu")
INFO: Jag är inte riktigt död ännu
Du kan filtrera på regexes, eller med godtyckliga funktioner:
>>> twiggy.emitters ['*']. filter = ". * byxor. *"
>>> Log.info ("Fick min {0} på", "byxor")
INFO: Fick mina byxor på
>>> Log.info ("Fick min {0} på", "skjorta")
Låt oss återställa alla att:
>>> twiggy.emitters ['*']. filter = Sann
>>> twiggy.emitters ['*']. min_level = twiggy.Levels.DEBUG
bättre resultat
Radbrytningar undertrycks som standard; som kan stängas av per-meddelande:
>>> Log.info ("user ninput nannoys Nus)
INFO: user ninput nannoys Nus
>>> log.options (suppress_newlines = False) .info ("vi Ndeal")
INFO: vi
affär
Undantag prefix. Kan också passera exc_info. Använd " n" som prefix för att vika in en enda rad:
>>> Försök:
... 1/0
... Utom:
... Log.trace ("error") varning ("Oh inte") #doctest:. + ELLIPS
VARNING: oh expertnätverk
TRACE spårnings (det senaste samtalet sist):
Spårningsfil "", rad 2, i
TRACE 1/0
TRACE ZeroDivisionError: heltalsdivision eller modulo med noll
Metod Chai
Jag gillar den här kedjad stil en hel del.
>>> Log.name ("Benito"). Info ("hi there")
INFO: benito: hi there
Det gör strukturerad loggning enkel:
>>> log.fields (vägar = 42) .info ("Gå en promenad")
INFO: vägar = 42: Gå en promenad
Genväg. Perfekt för runtime statistikinsamling.
>>> Log.struct (vägar = 42, delfiner = "tacksam")
INFO: delfiner = tack: vägar = 42:
Partiell bindning kan vara användbara för webapps:
>>> Per_request_log = log.fields (request_id = '12345')
>>> Per_request_log.fields (rader = 100, user = "frank"). Info (frobnicating databas)
INFO: request_id = 12345: v = 100: user = frank: frobnicating databas
>>> per_request_log.fields (byte = 5678) .info (sändande sida över rören)
INFO: bytes = 5678: request_id = 12345: skicka sida över rören
Chained stil är fantastisk:
>>> Log.name (donjuan "). Fält (byxor =" sexy "). Info (" Hej, {som} vill {vad}? ", Som = 'damer, vad =' dance ')
INFO: donjuan: byxor = sexigt: hej, mina damer vill dansa?
Dynamisk!
Alla funktioner i args / fälten kallas och värdet substituerad:
>>> import os
>>> Från twiggy.lib import thread_name
>>> Thread_name ()
'MainThread'
>>> log.fields (pid = os.getpid) .info ("Jag är i tråden {0}", thread_name) #doctest: + ELLIPS
INFO: pid = 1076: Jag är i gäng MainThread
Detta kan vara användbart med delvis bundna loggers, som låter oss göra en del coola grejer:
>>> Klass ThreadTracker (objekt):
... Def __init __ (self, obj):
... Själv .__ obj = obj
... # En delvis bunden logger
... Själv .__ logga = log.name ("tracker"). Fält (obj_id = id (obj), tråd = thread_name)
... Själv .__ log.debug ("började spåra")
... Def __getattr __ (self, attr):
... Själv .__ log.debug ("nås {0}", attr)
... Retur getattr (själv .__ obj, attr)
...
>>> Klass Bunch (objekt):
... Passera
...
>>> Foo = Bunch ()
>>> Foo.bar = 42
>>> Spåras = ThreadTracker (foo)
DEBUG: tracker: obj_id = 14063980: tråd = MainThread: började spåra
>>> Tracked.bar
DEBUG: tracker: obj_id = 14063980: tråd = MainThread: nås bar
42
>>> Importgäng
>>> T = threading.Thread (target = lambda: tracked.bar * 2, name = "TheDoubler")
>>> T.start ()
DEBUG: tracker: obj_id = 14063980: tråd = TheDoubler: nås bar
Om du verkligen vill logga en inlösbara, repr () det eller linda in det i lambda.
optimeringar
Som en optimering kan en min_level ställas in på loggers:
>>> Mylog.min_level = twiggy.Levels.INFO
>>> Mylog.info ("Du ser detta")
INFO: alfredo: Du ser detta
>>> Mylog.debug ("Detta är dolt")
De tar också ett filter som verkar på format_spec. Användningsfallet effektivt stänga av specifika meddelanden i ett bibliotek som gör något dumt:
>>> Mylog.filter = lambda s: "busstreck" inte s
>>> Mylog.info ("Starta enfald")
INFO: alfredo Från enfald
>>> For i in xrange (3): # för stora värden av 3
... Mylog.info ("jag kallar ståhej!")
>>> Mylog.info ("End idiotiska")
INFO: alfredo: End enfald

Krav :

  • Python

Annan programvara för utvecklare Peter Fein

Petapass
Petapass

11 May 15

Twiggy
Twiggy

12 Apr 15

Kommentarer till Twiggy

Kommentarer hittades inte
Kommentar
Slå på bilder!