Twiggy on varhaisvaiheen hankkeesta rakentaa entistä Pythonic hakkuut paketti.
Käyttö:
Tee näyttö työ:
>>> Tuonti sys; sys.stderr = sys.stdout
Käyttöönotto on helppoa
Teidän main.py:
>>> Tuonti Twiggy
>>> Twiggy.quick_setup ()
Logging viestit
>>> Alkaen Twiggy tuonti *
Tärkein rajapinta on maaginen loki:
>>> Log #doctest: + ELLIPSIS
Se toimii kättelyssä, tavallisilla tasoilla:
>>> Log.debug ("Saatat välitä ')
Debug: Voit välitä
>>> Log.error ('OMFG! Housut tulessa! ")
VIRHE: OMFG! Housut tulessa!
Se tukee useita muotoiluista oletuksena uutta tyyliä:
>>> Log.info ("en käytä {0} minun {missä} ',' housut", jossa = 'jalat')
INFO: En käytä housuja jalkojani
Vanha tyyli toimii hyvin, vaikka:
>>> Log.options (style = 'prosenttia). Info ("Tykkään% s', 'pyöriä')
INFO: Pidän polkupyörää
Samoin kuin malleja:
>>> Log.options (style = "dollaria). Info (" $ mitä tappaa ', mitä =' Cars)
INFO: Cars kill
Voit nimetä loggers:
>>> Mylog = log.name ('alfredo')
>>> Mylog.debug ('hei')
Debug: Alfredo: Hello
Mutta nimi ei ole suhteessa kohteen; se on vain ihmisten käyttöön:
>>> Mylog on log.name ('alfredo')
Väärä
Emitting viestit
Aiheuttajat ovat löyhästi:
>>> Twiggy.emitters #doctest: + ELLIPSIS
{"*":
Voit asettaa min_level on Emitters:
>>> Twiggy.emitters ['*']. Min_level = twiggy.Levels.INFO
>>> Log.debug ("Apua, apua Minut tukahdutetaan")
>>> Log.info ("En ole ihan vielä kuollut")
INFO: En ole ihan vielä kuollut
Voit suodattaa regexes, tai mielivaltaisia toiminnot:
>>> Twiggy.emitters ['*']. Suodatin = ". * Pants. *"
>>> Log.info ("Sain {0} on", "housut")
INFO: Sain housut
>>> Log.info ("Sain {0} on", "-paita")
Oletetaan palauttaa kaikki, jotka:
>>> Twiggy.emitters ['*']. Suodatin = True
>>> Twiggy.emitters ['*']. Min_level = twiggy.Levels.DEBUG
Parempi teho
Rivinvaihtoja tukahdutetaan oletuksena; joka voidaan kytkeä pois päältä per-viesti:
>>> Log.info ("Käyttäjä ninput nannoys nus")
INFO: user ninput nannoys nus
>>> Log.options (suppress_newlines = False) .info ("me ndeal ')
INFO: me
sopimus
Poikkeuksia ovat etuliite. Voi myös pass exc_info. Käytä ' n' liittää taita yhdellä rivillä:
>>> Try:
... 1/0
... Paitsi:
... Log.trace ("virhe"). Varoitus ("Oivoi ') #doctest: + ELLIPSIS
VAROITUS: Oivoi
TRACE Jäljitys (viimeisin kutsu viimeinen):
TRACE tiedosto "
TRACE 1/0
TRACE ZeroDivisionError: kokonaislukujaolla tai modulo nollalla
Menetelmä ketjutus
Pidän tästä kahlittu tyyliin paljon.
>>> Log.name ('Benito'). Info ("hi there ')
INFO: Benito: hi there
Se tekee jäsennelty hakkuiden helppoa:
>>> Log.fields (polut = 42) .info ("Going for kävelylle")
INFO: polut = 42: Going for kävelylle
Oikotietä. Suuri runtime tilastojen kerääminen.
>>> Log.struct (polut = 42, delfiinien = 'kiitollisia')
INFO: delfiinit = kiitollisia: polut = 42:
Osittainen sitoutuminen voi olla hyötyä webapps:
>>> Per_request_log = log.fields (request_id = '12345')
>>> Per_request_log.fields (rivejä = 100, käyttäjän = 'Frank'). Info ("frobnicating tietokanta ')
INFO: request_id = 12345: krs = 100: käyttäjä = rehellisiä: frobnicating tietokanta
>>> Per_request_log.fields (bytes = 5678) .info ("lähettäminen sivu yli putket)
INFO: bytes = 5678: request_id = 12345: lähettäminen sivulla over putket
Kahlittu tyyli on mahtava:
>>> Log.name ('donjuan'). Kentät (housut = 'seksikäs'). Info ("Hei, {jotka} haluavat {Mitä}?", Joka = 'naisten, mitä =' tanssi ')
INFO: donjuan: housut = sexy: hei, naiset haluavat tanssia?
Dynaaminen!
Mikä tahansa toiminnot args / kenttiä kutsutaan ja arvo substitued:
>>> Tuonti os
>>> Alkaen twiggy.lib tuonti thread_name
>>> Thread_name ()
"MainThread"
>>> Log.fields (pid = os.getpid) .info ("Olen säikeen {0}", thread_name) #doctest: + ELLIPSIS
INFO: pid = 1076: Olen thread MainThread
Tämä voi olla hyödyllinen osittain sidottu puunkorjuuta, joka antaa on meidän tehdä hienoja juttuja:
>>> Luokka ThreadTracker (kohde):
... Def __init __ (self, obj):
... Self .__ obj = obj
... # Osittain sidottu metsuri
... Self .__ log = log.name ("tracker"). Kentät (obj_id = id (obj), kierre = thread_name)
... Self .__ log.debug ("aloitti seuranta")
... Def __getattr __ (self, attr):
... Self .__ log.debug ("näytetty {0}", attr)
... Paluu getattr (self .__ obj, attr)
...
>>> Luokka Bunch (kohde):
... Pass
...
>>> Foo = Bunch ()
>>> Foo.bar = 42
>>> Seurataan = ThreadTracker (foo)
Debug: tracker: obj_id = 14063980: thread = MainThread: alkoi seuranta
>>> Tracked.bar
Debug: tracker: obj_id = 14063980: thread = MainThread: näytetty bar
42
>>> Tuonti ketjuttaminen
>>> T = threading.Thread (target = lambda: tracked.bar * 2, name = "TheDoubler")
>>> T.start ()
Debug: tracker: obj_id = 14063980: thread = TheDoubler: näytetty bar
Jos todella haluat kirjautua vaadittaessa maksettavaa, repr () sitä tai kääri se lambda.
Optimoinnit
Kuten optimointi, min_level voidaan asettaa loggers:
>>> Mylog.min_level = twiggy.Levels.INFO
>>> Mylog.info ("Näetkö tämän")
INFO: Alfredo: Näet tämän
>>> Mylog.debug ("Tämä on piilotettu")
He myös ottavat suodattimen, joka toimii format_spec. Käyttötapaus tehokkaasti sulkemalla tiettyjä viestejä kirjasto, joka tekee jotain typerää:
>>> Mylog.filter = lambda s: "metkut" ei s
>>> Mylog.info ("Starting typeryyttä")
INFO: Alfredo: Starting typeryyttä
>>> I: xRange (3): # suurille arvoilla 3
... Mylog.info ("I metkuilulta!")
>>> Mylog.info ("End typeryyttä")
INFO: Alfredo: End typeryyttä
vaatimukset
- Python
Kommentteja ei löytynyt