Prijava v Python

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.

  1. Ustvarite in konfigurirajte zapisovalnik. Lahko ima več parametrov. Pomembno pa je, da posredujete ime datoteke, v katero želite zabeležiti dogodke.
  2. Tukaj lahko nastavite tudi format zapisovalnika. Datoteka privzeto deluje v priložiti način, vendar ga lahko po potrebi spremenimo v način pisanja.
  3. 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.
  4. 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.

Osnove beleženja Python

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.