Kirjaaminen on tapa seurata tapahtumia, jotka tapahtuvat, kun jokin ohjelmisto suoritetaan. Kirjautuminen on tärkeää ohjelmistojen kehittämisessä, virheenkorjauksessa ja käytössä. Jos sinulla ei ole lokitietueita ja ohjelma kaatuu, on hyvin vähän mahdollisuuksia havaita ongelman syy. Ja jos syy löytyy, se vie paljon aikaa. Kirjaamalla voit jättää korppujauhoja, jotta voimme selvittää ongelman syyn, jos jokin menee pieleen.
On olemassa useita tilanteita, kuten jos odotat kokonaislukua, sinulle on annettu float ja voit pilvi API , palvelu on poissa kunnossapidosta ja paljon muuta. Tällaiset ongelmat ovat hallitsemattomia ja niitä on vaikea määrittää.
Miksi print-lause ei ole Pythonic
Jotkut kehittäjät käyttävät lauseiden tulostamisen käsitettä tarkistaakseen, suoritetaanko lausekkeet oikein vai onko tapahtunut jokin virhe. Mutta tulostaminen ei ole hyvä idea. Se voi ratkaista ongelmasi yksinkertaisissa skripteissä, mutta monimutkaisissa skripteissä tulostustapa epäonnistuu.
Pythonissa on sisäänrakennettu moduuli puunkorjuu joka mahdollistaa tilaviestien kirjoittamisen tiedostoon tai muihin lähtövirtoihin. Tiedosto voi sisältää tietoa siitä, mikä osa koodista on suoritettu ja mitä ongelmia on ilmennyt.
Python-kirjaustasot
Lokiviestissä on viisi sisäänrakennettua tasoa.
- Virheenkorjaus: Näitä käytetään antamaan yksityiskohtaista tietoa, joka on tyypillisesti kiinnostavaa vain ongelmien diagnosoinnissa.
- Tiedot: Näitä käytetään varmistamaan, että asiat toimivat odotetulla tavalla
- Varoitus: Näitä käytetään osoituksena siitä, että jotain odottamatonta on tapahtunut, tai ne viittaavat johonkin ongelmaan lähitulevaisuudessa
- Virhe: Tämä kertoo, että vakavamman ongelman vuoksi ohjelmisto ei ole pystynyt suorittamaan jotakin toimintoa
- Kriittinen: Tämä kertoo vakavasta virheestä, mikä osoittaa, että itse ohjelma ei ehkä pysty jatkamaan toimintaansa
Tarvittaessa kehittäjillä on mahdollisuus luoda lisää tasoja, mutta nämä riittävät kaikkiin mahdollisiin tilanteisiin. Jokaiselle sisäänrakennetulle tasolle on määritetty sen numeerinen arvo.

Kirjausmoduuli on täynnä useita ominaisuuksia. Siinä on useita vakioita, luokkia ja menetelmiä. Isoilla kirjaimilla varustetut alkiot ovat vakioita, isoilla kirjaimilla kirjoitetut alkiot ovat luokkia ja pienillä kirjaimilla alkavat alkiot ovat menetelmiä.
Itse peruskäsittelijä tarjoaa useita logger-objekteja.
- Logger.info(viesti): Tämä kirjaa viestin tason INFO tähän loggeriin.
- Logger.warning(msg): Tämä kirjaa lokiin viestin, jossa on taso VAROITUS.
- Logger.error(msg): Tämä kirjaa lokiin viestin, jonka taso on ERROR.
- Logger.critical(viesti): Tämä kirjaa lokiin viestin, jonka taso on KRIITTINEN.
- Logger.log(lvl,msg): Tämä kirjaa viestin kokonaislukutason lvl tähän loggeriin.
- Logger.exception(msg): Tämä kirjaa lokiin viestin, jonka taso on ERROR.
- Logger.setLevel(lvl): Tämä toiminto asettaa tämän loggerin kynnyksen arvoon lvl. Tämä tarkoittaa, että kaikki tämän tason alapuolella olevat viestit ohitetaan.
- Logger.addFilter(suodatin): Tämä lisää tähän loggeriin erityisen suodattimen.
- Logger.removeFilter(filt): Tämä poistaa tietyn suodattimen sovituksen tähän loggeriin.
- Logger.filter(tietue): Tämä menetelmä käyttää loggerin suodatinta annettuun tietueeseen ja palauttaa True-arvon, jos tietue on käsiteltävä. Muussa tapauksessa se palauttaa False.
- Logger.addHandler(hdlr): Tämä lisää tietyn käsittelijän hdlr:n tähän loggeriin.
- Logger.removeHandler(hdlr): Tämä poistaa tietyn käsittelijän hdlr:n tästä lokerista.
- Logger.hasHandlers(): Tämä tarkistaa, onko loggerissa käsittelijöitä määritetty vai ei.
Hyödyllisiä käsittelijöitä
Peruskäsittelijäluokan lisäksi tarjolla on monia hyödyllisiä alaluokkia.
| Käsittelijä | Kuvaus |
|---|---|
| StreamHandler | Lähettää viestejä streameihin (tiedostomaiset objektit). |
| Tiedostonkäsittelijä | Lähettää viestejä levytiedostoihin. |
| BaseRotatingHandler | Perusluokka käsittelijöille, jotka kiertävät lokitiedostoja tietyssä kohdassa. Käyttää Pyörivä tiedostonkäsittelijä tai TimedRotatingFileHandler sen sijaan. |
| Pyörivä tiedostonkäsittelijä | Lähettää viestejä levytiedostoille ja tukee lokitiedostojen enimmäiskokoja ja lokitiedostojen kiertoa. |
| TimedRotatingFileHandler | Lähettää viestejä levytiedostoille kiertäen lokitiedostoa tietyin aikavälein. |
| SocketHandler | Lähettää viestejä TCP/IP-pistokkeisiin. Tukee myös Unix-verkkoaluepistokkeita Python 3.4:stä lähtien. |
| DatagramHandler | Lähettää viestejä UDP-socketeihin. Tukee myös Unix-verkkoaluepistokkeita Python 3.4:stä lähtien. |
| SMTPHandler | Lähettää viestejä määritettyyn sähköpostiosoitteeseen. |
| SysLogHandler | Lähettää viestejä Unix Syslogthe -daemonille, mahdollisesti etäkoneelle. |
| NTEventLogHandler | Lähettää viestejä Windows NT/2000/XP -tapahtumalokiin. |
| Memory Handler | Lähettää viestejä muistissa olevaan puskuriin, joka tyhjennetään aina, kun tietyt ehdot täyttyvät. |
| HTTP-käsittelijä | Lähettää viestejä HTTP-palvelimelle joko GET- tai POST-semantiikan avulla. |
| Katsottu Tiedostonkäsittelijä | Tarkkailee tiedostoa, johon se kirjautuu. Jos tiedosto muuttuu, se suljetaan ja avataan uudelleen käyttämällä tiedostonimeä. |
| Jononkäsittelijä | Lähettää viestejä jonoon, kuten ne, jotka on toteutettu jonossa tai monikäsittelymoduuleissa. |
| NullHandler | Ei tee mitään virheilmoituksilla. Kirjastojen kehittäjät käyttävät sitä välttääkseen 'Loggerille ei löytynyt käsittelijöitä' -viestin. |
Python-kirjauksen perusteet
Lokimoduulin käytön perusteet tapahtumien tallentamiseen tiedostoon ovat hyvin yksinkertaisia. Tätä varten tuo moduuli kirjastosta.
- Luo ja määritä loggeri. Sillä voi olla useita parametreja. Mutta mikä tärkeintä, välitä sen tiedoston nimi, johon haluat tallentaa tapahtumat.
- Täällä voidaan myös asettaa loggerin muoto. Oletuksena tiedosto toimii liittää -tilassa, mutta voimme tarvittaessa muuttaa sen kirjoitustilaan.
- Lisäksi voidaan asettaa loggerin taso, joka toimii seurannan kynnyksenä kullekin tasolle määritettyjen numeeristen arvojen perusteella.
On olemassa useita attribuutteja, jotka voidaan välittää parametreina. - Luettelo kaikista näistä parametreista on annettu Python-kirjasto . Käyttäjä voi valita vaaditun attribuutin vaatimuksensa mukaan.
Luo sen jälkeen objekti ja käytä erilaisia menetelmiä esimerkin mukaisesti.
Muuttujan kirjaaminen
Tämä koodi näyttää, kuinka virhesanoma kirjataan. Logging.error()-funktiota käytetään virheilmoituksen kirjaamiseen, jossa on muuttujan nimen paikkamerkki %s.
Python 3
import> logging> name>=> 'GFG'> logging.error(>'%s raised an error'>, name)> |
>
mitkä kuukaudet ovat Q3:ssa
>
Lähtö:
ERROR:root:GFG raised an error>
Kaikkien tasojen kirjaaminen
Tämä koodi näyttää kaikki kirjauksen tasot.
Python
# importing module> import> logging> # Create and configure logger> logging.basicConfig(filename>=>'newfile.log'>,> >format>=>'%(asctime)s %(message)s'>,> >filemode>=>'w'>)> # Creating an object> logger>=> logging.getLogger()> # Setting the threshold of logger to DEBUG> logger.setLevel(logging.DEBUG)> # Test messages> logger.debug(>'Harmless debug Message'>)> logger.info(>'Just an information'>)> logger.warning(>'Its a Warning'>)> logger.error(>'Did you try to divide by zero'>)> logger.critical(>'Internet is down'>)> |
>
>
Yllä oleva koodi luo tiedoston antamalla nimellä ja jos avaamme tiedoston, tiedosto sisältää seuraavat tiedot.
Lokikirjan määrittäminen
Kirjautuminen tiedostoon: temp.conf
[loggers] keys=root,simpleExample [handlers] keys=consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=consoleHandler [logger_simpleExample] level=DEBUG handlers=consoleHandler qualname=simpleExample propagate=0 [handler_consoleHandler]>
Esimerkki:
Koodi perustaa lokijärjestelmän käyttämällä konfiguraatiota temp.conf tiedosto. Se saa loggerin nimeltä yksinkertainen esimerkki ja kirjaa viestejä eri lokitasoilla.
Python 3
kuinka monta 0 miljardista
java-operaattorin ensisijaisuus
import> logging> import> logging.config> logging.config.fileConfig(>'temp.conf'>)> # create logger> logger>=> logging.getLogger(>'simpleExample'>)> # 'application' code> logger.debug(>'debug message'>)> logger.info(>'info message'>)> logger.warning(>'warn message'>)> logger.error(>'error message'>)> logger.critical(>'critical message'>)> |
>
>
Lähtö:
2023-06-15 18:16:21 - simpleExample - DEBUG - debug message 2023-06-15 18:16:21 - simpleExample - INFO - info message 2023-06-15 18:16:21 - simpleExample - WARNING - warn message 2023-06-15 18:16:21 - simpleExample - ERROR - error message 2023-06-15 18:16:21 - simpleExample - CRITICAL - critical message>
Python-kirjauksen poikkeus
Poikkeusten lisääminen kirjaamisen aikana voi olla hyödyllistä tietyissä skenaarioissa sovelluksesi poikkeuksellisten olosuhteiden tai virheiden osoittamiseksi. Nostamalla poikkeuksen voit pysäyttää normaalin suorituksen ja ilmoittaa soittajalle tai lokijärjestelmälle havaitusta ongelmasta.
Tässä koodissa nostamme esiin poikkeuksen, jonka hakkuut havaitsevat. poikkeus.
Python 3
import> logging> logging.basicConfig(level>=>logging.DEBUG,> >format>=>'%(asctime)s - %(levelname)s - %(message)s'>)> def> perform_operation(value):> >if> value <>0>:> >raise> ValueError(>'Invalid value: Value cannot be negative.'>)> >else>:> ># Continue with normal execution> >logging.info(>'Operation performed successfully.'>)> try>:> >input_value>=> int>(>input>(>'Enter a value: '>))> >perform_operation(input_value)> except> ValueError as ve:> >logging.exception(>'Exception occurred: %s'>,>str>(ve))> |
>
>
Lähtö:
Enter a value: -1 2023-06-15 18:25:18,064 - ERROR - Exception occurred: Invalid value: Value cannot be negative. ValueError: Invalid value: Value cannot be negative.>