Prijava v Python
Beleženje je sredstvo za sledenje dogodkom, ki se zgodijo, ko se izvaja neka programska oprema. Beleženje je pomembno za razvoj programske opreme, odpravljanje napak in delovanje. Če nimate nobenega zapisa za beleženje in se vaš program zruši, je zelo malo možnosti, da boste odkrili vzrok težave. In če odkrijete vzrok, vam bo vzelo veliko časa. Z beleženjem lahko pustite sled drobtin, tako da lahko, če gre kaj narobe, ugotovimo vzrok težave.
Obstaja več situacij, na primer, če pričakujete celo število, ste dobili plavajoče in lahko oblak API , storitev ne deluje zaradi vzdrževanja in še veliko več. Takšne težave so izven nadzora in jih je težko določiti.
Zakaj izjava za tiskanje ni Pythonic
Nekateri razvijalci uporabljajo koncept tiskanja stavkov za preverjanje, ali so stavki pravilno izvedeni ali če je prišlo do napake. Toda tiskanje ni dobra ideja. Morda bo rešil vaše težave pri preprostih skriptih, pri zapletenih skriptih pa pristop tiskanja ne bo uspel.
Python ima vgrajen modul sečnja ki omogoča pisanje statusnih sporočil v datoteko ali druge izhodne tokove. Datoteka lahko vsebuje informacije o tem, kateri del kode se izvaja in do kakšnih težav je prišlo.
Ravni beleženja Python
Obstaja pet vgrajenih ravni dnevniškega sporočila.
- Odpravljanje napak: Uporabljajo se za podajanje podrobnih informacij, ki so običajno zanimive le pri diagnosticiranju težav.
- Informacije: Uporabljajo se za potrditev, da stvari delujejo po pričakovanjih
- Opozorilo: Uporabljajo se kot znak, da se je zgodilo nekaj nepričakovanega, ali kažejo na težave v bližnji prihodnosti
- Napaka: To pove, da zaradi resnejše težave programska oprema ni mogla izvesti neke funkcije
- Kritično: To sporoča resno napako, ki nakazuje, da sam program morda ne more nadaljevati delovanja
Če je potrebno, imajo razvijalci možnost ustvariti več ravni, vendar te zadostujejo za obvladovanje vseh možnih situacij. Vsakemu vgrajenemu nivoju je bila dodeljena številčna vrednost.
Modul za beleženje ima več funkcij. Ima več konstant, razredov in metod. Postavke z velikimi črkami so konstantne, postavke z veliko začetnico so razredi, postavke, ki se začnejo z malimi črkami, pa so metode.
Obstaja več predmetov zapisovalnika, ki jih ponuja sam osnovni Handler.
- Logger.info(msg): To bo v ta zapisovalnik zabeležilo sporočilo z nivojem INFO.
- Logger.warning(msg): To bo v ta zapisovalnik zabeležilo sporočilo s stopnjo OPOZORILO.
- Logger.error(msg): To bo v ta zapisovalnik zabeležilo sporočilo s stopnjo ERROR.
- Logger.critical(msg): To bo v ta zapisovalnik zabeležilo sporočilo s stopnjo KRITIČNO.
- Logger.log(lvl,msg): To bo v ta zapisovalnik zabeležilo sporočilo s celoštevilsko ravnjo lvl.
- Logger.exception(msg): To bo v ta zapisovalnik zabeležilo sporočilo s stopnjo ERROR.
- Logger.setLevel(lvl): Ta funkcija nastavi prag tega zapisovalnika na lvl. To pomeni, da bodo vsa sporočila pod to ravnjo prezrta.
- Logger.addFilter(filt): To doda poseben filter, ki se prilega temu zapisovalniku.
- Logger.removeFilter(filt): To odstrani določeno prileganje filtra v ta zapisovalnik.
- Logger.filter(zapis): Ta metoda uporabi filter zapisovalnika za podani zapis in vrne True, če naj bo zapis obdelan. V nasprotnem primeru bo vrnil False.
- Logger.addHandler(hdlr): S tem se temu zapisovalniku doda določen obravnavalec hdlr.
- Logger.removeHandler(hdlr): S tem se v ta zapisovalnik odstrani določen upravljavec hdlr.
- Logger.hasHandlers(): S tem se preveri, ali ima zapisovalnik konfiguriran kakšen upravljalnik ali ne.
Uporabni vodniki
Poleg osnovnega razreda upravljavca so na voljo številni uporabni podrazredi.
| Voditelj | Opis |
|---|---|
| StreamHandler | Pošilja sporočila tokovom (datotekam podobni objekti). |
| FileHandler | Pošilja sporočila v datoteke na disku. |
| BaseRotatingHandler | Osnovni razred za obdelovalce, ki rotirajo datoteke dnevnika na določeni točki. Uporaba RotatingFileHandler oz TimedRotatingFileHandler namesto tega. |
| RotatingFileHandler | Pošilja sporočila v diskovne datoteke s podporo za največje velikosti dnevniških datotek in rotacijo dnevniških datotek. |
| TimedRotatingFileHandler | Pošilja sporočila v diskovne datoteke, pri čemer rotira dnevniško datoteko v določenih časovnih intervalih. |
| SocketHandler | Pošilja sporočila v vtičnice TCP/IP. Podpira tudi domenske vtičnice Unix od Pythona 3.4. |
| DatagramHandler | Pošilja sporočila v vtičnice UDP. Podpira tudi domenske vtičnice Unix od Pythona 3.4. |
| SMTPHandler | Pošilja sporočila na določen e-poštni naslov. |
| SysLogHandler | Pošilja sporočila demonu Unix Syslog, po možnosti na oddaljenem računalniku. |
| NTEventLogHandler | Pošilja sporočila v dnevnik dogodkov Windows NT/2000/XP. |
| MemoryHandler | Pošlje sporočila v medpomnilnik v pomnilniku, ki se izprazni vsakič, ko so izpolnjeni določeni kriteriji. |
| HTTPHandler | Pošlje sporočila strežniku HTTP z uporabo semantike GET ali POST. |
| WatchedFileHandler | Opazuje datoteko, v katero se pripisuje. Če se datoteka spremeni, se zapre in znova odpre z imenom datoteke. |
| QueueHandler | Pošilja sporočila v čakalno vrsto, kot so tista, implementirana v čakalni vrsti ali večprocesnih modulih. |
| NullHandler | S sporočili o napakah ne naredi ničesar. Uporabljajo ga razvijalci knjižnic, da se izognejo sporočilu »Za zapisovalnik ni bilo mogoče najti nobenih upravljavcev«. |
Osnove beleženja Python
Osnove uporabe modula za beleženje dogodkov v datoteko so zelo preproste. Za to preprosto uvozite modul iz knjižnice.
- Ustvarite in konfigurirajte zapisovalnik. Lahko ima več parametrov. Pomembno pa je, da posredujete ime datoteke, v katero želite zabeležiti dogodke.
- Tukaj lahko nastavite tudi format zapisovalnika. Datoteka privzeto deluje v priložiti način, vendar ga lahko po potrebi spremenimo v način pisanja.
- Prav tako je mogoče nastaviti raven zapisovalnika, ki deluje kot prag za sledenje na podlagi številskih vrednosti, dodeljenih vsaki ravni.
Obstaja več atributov, ki jih je mogoče posredovati kot parametre. - Seznam vseh teh parametrov je naveden v Knjižnica Python . Uporabnik lahko izbere zahtevani atribut glede na zahtevo.
Nato ustvarite predmet in uporabite različne metode, kot je prikazano v primeru.
Beleženje spremenljivke
Ta koda prikazuje, kako zabeležiti sporočilo o napaki. Funkcija logging.error() se uporablja za beleženje sporočila o napaki z nadomestnim znakom %s za ime spremenljivke.
Python3
import> logging> name> => 'GFG'> logging.error(> '%s raised an error'> , name)> |
Izhod:
ERROR:root:GFG raised an error
Beleženje vseh nivojev
Ta koda prikazuje vse ravni beleženja.
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'> )> |
Zgornja koda bo ustvarila datoteko s podanim imenom in če datoteko odpremo, bo datoteka vsebovala naslednje podatke.
Konfiguriranje beleženja
Prijava v datoteko: temp.konf
[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]
primer:
Koda nastavi sistem beleženja z uporabo konfiguracije iz temp.konf mapa. Pridobi zapisovalnik z imenom preprost primer in beleži sporočila z različnimi nivoji dnevnika.
Python3
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'> )> |
Izhod:
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
Izjema beleženja Python
Sprožitev izjem med beleženjem je lahko uporabna v določenih scenarijih za označevanje izjemnih pogojev ali napak v vaši aplikaciji. Če sprožite izjemo, lahko zaustavite običajni tok izvajanja in obvestite klicatelja ali sistem za beleženje o težavi, ki ste jo opazili.
V tej kodi sprožimo izjemo, ki jo ujame beleženje. izjema.
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))> |
Izhod:
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.