Registravimas yra priemonė sekti įvykius, kurie įvyksta, kai veikia kai kuri programinė įranga. Registravimas yra svarbus programinės įrangos kūrimui, derinimui ir paleidimui. Jei neturite jokių registravimo įrašų ir jūsų programa strigsta, yra labai mažai galimybių, kad aptiksite problemos priežastį. Ir jei nustatysite priežastį, tai užims daug laiko. Naudodami medienos ruošą galite palikti džiūvėsėlių pėdsaką, kad, jei kas nors nutiktų, galėtume nustatyti problemos priežastį.
Yra keletas situacijų, pavyzdžiui, jei tikitės sveikojo skaičiaus, jums buvo suteiktas plūduras ir galite debesį API , paslauga neveikia dėl priežiūros ir daug daugiau. Tokios problemos yra nekontroliuojamos ir jas sunku nustatyti.
Kodėl spausdinimo teiginys nėra Pythonic
Kai kurie kūrėjai naudoja teiginių spausdinimo koncepciją, kad patikrintų, ar teiginiai vykdomi teisingai, ar įvyko klaida. Tačiau spausdinti nėra gera idėja. Tai gali išspręsti paprastų scenarijų problemas, tačiau sudėtingų scenarijų atveju spausdinimo metodas nepavyks.
Python turi įmontuotą modulį medienos ruoša kuri leidžia rašyti būsenos pranešimus į failą ar bet kokius kitus išvesties srautus. Failas gali turėti informacijos apie tai, kuri kodo dalis vykdoma ir kokios problemos iškilo.
Python registravimo lygiai
Yra penki integruoti žurnalo pranešimo lygiai.
- Derinimas: Jie naudojami norint pateikti išsamią informaciją, kuri paprastai domina tik diagnozuojant problemas.
- Informacija: Jie naudojami siekiant patvirtinti, kad viskas veikia taip, kaip tikėtasi
- Įspėjimas: Jie naudojami kaip požymis, kad įvyko kažkas netikėto, arba rodo kokią nors problemą artimiausioje ateityje
- Klaida: Tai rodo, kad dėl rimtesnės problemos programinė įranga negalėjo atlikti kai kurių funkcijų
- Kritinis: Tai rodo rimtą klaidą, nurodant, kad pati programa gali negalėti toliau veikti
Jei reikia, kūrėjai turi galimybę sukurti daugiau lygių, tačiau jų pakanka, kad būtų galima išspręsti visas įmanomas situacijas. Kiekvienam integruotam lygiui buvo priskirta skaitinė reikšmė.

Registravimo modulyje yra keletas funkcijų. Jis turi keletą konstantų, klasių ir metodų. Elementai su didžiosiomis raidėmis yra pastovūs, didžiosiomis raidėmis rašomi elementai yra klasės, o elementai, prasidedantys mažosiomis raidėmis, yra metodai.
Yra keletas logger objektų, kuriuos siūlo pats bazinis tvarkytojas.
- Logger.info(msg): Šiame registratoriuje bus užregistruotas pranešimas su INFO lygiu.
- Logger.warning (žinutes): Šiame registratoriuje bus užregistruotas pranešimas su lygiu ĮSPĖJIMAS.
- Logger.error (žinutes): Šiame registratoriuje bus užregistruotas pranešimas su lygiu ERROR.
- Logger.critical (pranešimas): Šiame registratoriuje bus užregistruotas pranešimas, kurio lygis KRITINIS.
- Logger.log (lvl, msg): Šiame registratoriuje bus įregistruotas pranešimas su sveikųjų skaičių lvl.
- Logger.exception(msg): Šiame registratoriuje bus užregistruotas pranešimas su lygiu ERROR.
- Logger.setLevel(lvl): Ši funkcija nustato šio registratoriaus slenkstį į lvl. Tai reiškia, kad visi žemiau šio lygio esantys pranešimai bus ignoruojami.
- Logger.addFilter(filtras): Tai prideda konkretų filtrą, tinkantį šiam registruotojui.
- Logger.removeFilter(filtras): Tai pašalina konkretų filtrą, tinkantį šiame registratoriuje.
- Logger.filter (įrašas): Šis metodas pateiktam įrašui pritaiko registratoriaus filtrą ir grąžina True, jei įrašas turi būti apdorotas. Priešingu atveju jis grįš False.
- Logger.addHandler(hdlr): Tai prideda konkretų tvarkyklę hdlr prie šio registratoriaus.
- Logger.removeHandler(hdlr): Tai pašalina konkretų tvarkyklę hdlr į šį registratorių.
- Logger.hasHandlers(): Taip patikrinama, ar registratorius turi sukonfigūruotą tvarkyklę, ar ne.
Naudingi tvarkytojai
Be pagrindinės tvarkyklių klasės, pateikiama daug naudingų poklasių.
| Prižiūrėtojas | apibūdinimas |
|---|---|
| StreamHandler | Siunčia pranešimus į srautus (į failą panašius objektus). |
| Failų tvarkytojas | Siunčia pranešimus į disko failus. |
| BaseRotatingHandler | Bazinė klasė tvarkytojams, kurie tam tikru momentu suka žurnalo failus. Naudokite RotatingFileHandler arba TimedRotatingFileHandler vietoj to. |
| RotatingFileHandler | Siunčia pranešimus į disko failus, palaiko maksimalų žurnalo failų dydį ir žurnalo failų pasukimą. |
| TimedRotatingFileHandler | Siunčia pranešimus į disko failus, tam tikrais laiko intervalais pasukdamas žurnalo failą. |
| SocketHandler | Siunčia pranešimus į TCP/IP lizdus. Taip pat palaiko Unix domeno lizdus nuo Python 3.4. |
| DatagramHandler | Siunčia pranešimus į UDP lizdus. Taip pat palaiko Unix domeno lizdus nuo Python 3.4. |
| SMTPHandler | Siunčia pranešimus nurodytu el. pašto adresu. |
| SysLogHandler | Siunčia pranešimus į Unix Syslogthe demoną, galbūt nuotoliniame kompiuteryje. |
| NTEventLogHandler | Siunčia pranešimus į Windows NT/2000/XP įvykių žurnalą. |
| Atminties tvarkytojas | Siunčia pranešimus į atmintyje esantį buferį, kuris iškraunamas, kai tenkinami konkretūs kriterijai. |
| HTTPHandler | Siunčia pranešimus į HTTP serverį naudodamas GET arba POST semantiką. |
| Stebėtas failų tvarkytojas | Stebi failą, prie kurio prisijungia. Jei failas pasikeičia, jis uždaromas ir vėl atidaromas naudojant failo pavadinimą. |
| Eilių tvarkytojas | Siunčia pranešimus į eilę, pvz., įdiegtus eilėje arba kelių apdorojimo moduliuose. |
| NullHandler | Nieko nedaro su klaidų pranešimais. Naudoja bibliotekos kūrėjai, norėdami išvengti pranešimo „Nepavyko rasti registratoriaus tvarkytojų“. |
Python registravimo pagrindai
Registravimo modulio naudojimo įvykiams įrašyti į failą pagrindai yra labai paprasti. Norėdami tai padaryti, tiesiog importuokite modulį iš bibliotekos.
- Sukurkite ir sukonfigūruokite registratorių. Jis gali turėti keletą parametrų. Tačiau svarbu perduoti failo, kuriame norite įrašyti įvykius, pavadinimą.
- Čia taip pat galima nustatyti registratoriaus formatą. Pagal numatytuosius nustatymus failas veikia pridėti režimu, tačiau prireikus galime jį pakeisti į rašymo režimą.
- Be to, galima nustatyti registratoriaus lygį, kuris veikia kaip sekimo slenkstis pagal kiekvienam lygiui priskirtas skaitines reikšmes.
Yra keletas atributų, kuriuos galima perduoti kaip parametrus. - Pateikiamas visų šių parametrų sąrašas Python biblioteka . Vartotojas gali pasirinkti reikiamą atributą pagal reikalavimą.
Po to sukurkite objektą ir naudokite įvairius metodus, kaip parodyta pavyzdyje.
Kintamojo registravimas
Šis kodas parodo, kaip užregistruoti klaidos pranešimą. Funkcija logging.error() naudojama užregistruoti klaidos pranešimą su kintamojo pavadinimo vietos rezervavimo ženklu %s.
Python3
import> logging> name>=> 'GFG'> logging.error(>'%s raised an error'>, name)> |
>
sql tvarka pagal datą
>
Išvestis:
ERROR:root:GFG raised an error>
Visų lygių registravimas
Šis kodas parodo visus registravimo lygius.
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'>)> |
>
>
Aukščiau pateiktas kodas sugeneruos failą pateiktu pavadinimu ir, jei atidarysime failą, faile bus šie duomenys.
Registravimo konfigūravimas
Prisijungimas prie failo: 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]>
Pavyzdys:
Kodas nustato registravimo sistemą naudodamas konfigūraciją iš temp.conf failą. Jis gauna medkirtį, pavadintą paprastas pavyzdys ir registruoja pranešimus įvairiais žurnalo lygiais.
Python3
pitono dydis
masyvas Java metodais
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'>)> |
>
>
Išvestis:
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 registravimo išimtis
Išimčių iškėlimas registruojant gali būti naudingas tam tikrais atvejais, norint nurodyti išskirtines sąlygas arba klaidas jūsų programoje. Nurodę išimtį, galite sustabdyti įprastą vykdymo eigą ir pranešti skambinančiajam arba registravimo sistemai apie iškilusią problemą.
Šiame kode mes keliame išimtį, kurią užfiksuoja kirtimai. išimtis.
Python3
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))> |
>
>
Išvestis:
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.>