Prihlásenie do Pythonu
Protokolovanie je prostriedok na sledovanie udalostí, ku ktorým dochádza pri spustení nejakého softvéru. Protokolovanie je dôležité pre vývoj softvéru, ladenie a spustenie. Ak nemáte žiadny záznam a váš program zlyhá, existuje len veľmi málo šancí, že zistíte príčinu problému. A ak zistíte príčinu, zaberie vám to veľa času. S protokolovaním môžete zanechať omrvinky, takže ak sa niečo pokazí, môžeme určiť príčinu problému.
Existuje niekoľko situácií, napríklad ak očakávate celé číslo, dostali ste plávajúcu hodnotu a môžete vytvoriť oblak API , služba je mimo prevádzky z dôvodu údržby a oveľa viac. Takéto problémy sú mimo kontroly a je ťažké ich určiť.
Prečo príkaz print nie je v jazyku Pythonic
Niektorí vývojári používajú koncept tlače príkazov na overenie, či sú príkazy vykonané správne alebo či sa vyskytla nejaká chyba. Tlač však nie je dobrý nápad. Môže to vyriešiť vaše problémy pri jednoduchých skriptoch, ale pri zložitých skriptoch spôsob tlače zlyhá.
Python má vstavaný modul ťažba dreva ktorý umožňuje zapisovanie stavových správ do súboru alebo akéhokoľvek iného výstupného toku. Súbor môže obsahovať informácie o tom, ktorá časť kódu sa vykoná a aké problémy sa vyskytli.
Úrovne protokolovania Pythonu
Existuje päť vstavaných úrovní správy denníka.
- Ladenie: Používajú sa na poskytovanie podrobných informácií, ktoré sú zvyčajne zaujímavé iba pri diagnostikovaní problémov.
- Info: Používajú sa na potvrdenie, že veci fungujú podľa očakávania
- POZOR: Používajú sa ako indikácia toho, že sa stalo niečo neočakávané, alebo naznačuje nejaký problém v blízkej budúcnosti
- Chyba: To znamená, že kvôli vážnejšiemu problému softvér nemohol vykonávať nejakú funkciu
- kritické: Toto oznamuje vážnu chybu, ktorá naznačuje, že samotný program nemusí byť schopný pokračovať v práci
V prípade potreby majú vývojári možnosť vytvoriť viac úrovní, ale tieto sú dostatočné na zvládnutie každej možnej situácie. Každá vstavaná úroveň má priradenú svoju číselnú hodnotu.
Logovací modul je vybavený niekoľkými funkciami. Má niekoľko konštánt, tried a metód. Položky so všetkými veľkými písmenami sú konštantné, položky s veľkými písmenami sú triedy a položky, ktoré začínajú malými písmenami, sú metódy.
Samotný základný Handler ponúka niekoľko loggerových objektov.
- Logger.info(msg): Týmto sa zaznamená správa s úrovňou INFO na tomto zapisovači.
- Logger.warning(msg): Týmto sa zaznamená správa s úrovňou VAROVANIE na tomto zapisovači.
- Logger.error(msg): Týmto sa na tomto zapisovači zaznamená správa s úrovňou ERROR.
- Logger.critical(msg): Týmto sa do tohto zapisovača zaznamená správa s kritickou úrovňou.
- Logger.log(lvl,msg): Týmto sa zaznamená správa s celočíselnou úrovňou lvl na tomto zapisovači.
- Logger.exception(msg): Týmto sa na tomto zapisovači zaznamená správa s úrovňou ERROR.
- Logger.setLevel(lvl): Táto funkcia nastavuje prah tohto zapisovača na lvl. To znamená, že všetky správy pod touto úrovňou budú ignorované.
- Logger.addFilter(filt): Tým sa do tohto zapisovača pridá špecifický filter.
- Logger.removeFilter(filt): Tým sa odstráni špecifický filter vhodný do tohto zapisovača.
- Logger.filter(záznam): Táto metóda aplikuje filter zapisovača na poskytnutý záznam a vráti hodnotu True, ak sa má záznam spracovať. V opačnom prípade sa vráti False.
- Logger.addHandler(hdlr): Tým sa do tohto zapisovača pridá špecifický obslužný program hdlr.
- Logger.removeHandler(hdlr) : Toto odstráni špecifický obslužný program hdlr do tohto zapisovača.
- Logger.hasHandlers(): Toto skontroluje, či má zapisovač nakonfigurovaný nejaký handler alebo nie.
Užitočné manipulátory
Okrem základnej triedy Handler je k dispozícii mnoho užitočných podtried.
| Handler | Popis |
|---|---|
| StreamHandler | Posiela správy do streamov (objekty podobné súborom). |
| FileHandler | Posiela správy do súborov na disku. |
| BaseRotatingHandler | Základná trieda pre manipulátory, ktoré rotujú protokolové súbory v určitom bode. Použite RotatingFileHandler alebo TimedRotatingFileHandler namiesto toho. |
| RotatingFileHandler | Posiela správy na diskové súbory s podporou maximálnej veľkosti protokolových súborov a rotácie protokolových súborov. |
| TimedRotatingFileHandler | Posiela správy do súborov na disku, pričom v určitých časových intervaloch otáča protokolový súbor. |
| SocketHandler | Posiela správy do soketov TCP/IP. Podporuje tiež zásuvky domén Unix od Pythonu 3.4. |
| DatagramHandler | Posiela správy do UDP soketov. Podporuje tiež zásuvky domén Unix od Pythonu 3.4. |
| SMTPHandler | Posiela správy na určenú e-mailovú adresu. |
| SysLogHandler | Posiela správy do unixového démona Syslogthe, prípadne na vzdialený počítač. |
| NTEventLogHandler | Posiela správy do denníka udalostí Windows NT/2000/XP. |
| MemoryHandler | Posiela správy do vyrovnávacej pamäte v pamäti, ktorá sa vyprázdni vždy, keď sú splnené špecifické kritériá. |
| HTTPHandler | Posiela správy na server HTTP pomocou sémantiky GET alebo POST. |
| WatchedFileHandler | Sleduje súbor, do ktorého sa prihlasuje. Ak sa súbor zmení, zatvorí sa a znova sa otvorí s názvom súboru. |
| QueueHandler | Posiela správy do frontu, ako sú tie, ktoré sú implementované vo fronte alebo v moduloch multiprocessingu. |
| NullHandler | Nerobí nič s chybovými hláseniami. Používajú ho vývojári knižníc, aby sa vyhli správe „Nenašli sa žiadne obslužné nástroje pre záznamník“. |
Základy protokolovania Pythonu
Základy používania logovacieho modulu na zaznamenávanie udalostí do súboru sú veľmi jednoduché. Za týmto účelom jednoducho importujte modul z knižnice.
- Vytvorte a nakonfigurujte záznamník. Môže mať viacero parametrov. Ale čo je dôležité, zadajte názov súboru, do ktorého chcete zaznamenávať udalosti.
- Tu je možné nastaviť aj formát záznamníka. V predvolenom nastavení súbor funguje v priložiť ale v prípade potreby ho môžeme zmeniť na režim zápisu.
- Tiež je možné nastaviť úroveň zapisovača, ktorá funguje ako prah pre sledovanie na základe číselných hodnôt priradených každej úrovni.
Existuje niekoľko atribútov, ktoré možno odovzdať ako parametre. - Zoznam všetkých týchto parametrov je uvedený v Knižnica Python . Užívateľ si môže zvoliť požadovaný atribút podľa požiadavky.
Potom vytvorte objekt a použite rôzne metódy, ako je uvedené v príklade.
Zaznamenávanie premennej
Tento kód ukazuje, ako zaznamenať chybové hlásenie. Funkcia logging.error() sa používa na zaprotokolovanie chybového hlásenia so zástupným znakom %s pre názov premennej.
Python3
import> logging> name> => 'GFG'> logging.error(> '%s raised an error'> , name)> |
Výkon :
ERROR:root:GFG raised an error
Logovanie všetkých úrovní
Tento kód demonštruje všetky úrovne protokolovania.
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'> )> |
Vyššie uvedený kód vygeneruje súbor so zadaným názvom a ak súbor otvoríme, súbor obsahuje nasledujúce údaje.
Konfigurácia protokolovania
Prihlásenie do súboru: 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]
Príklad:
Kód nastaví systém protokolovania pomocou konfigurácie z temp.conf súbor. Získa logger s názvom jednoduchý príklad a protokoluje správy s rôznymi úrovňami protokolu.
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'> )> |
Výkon :
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
Výnimka protokolovania Pythonu
Vyvolávanie výnimiek počas protokolovania môže byť užitočné v určitých scenároch na označenie výnimočných podmienok alebo chýb vo vašej aplikácii. Vyvolaním výnimky môžete zastaviť normálny tok vykonávania a upozorniť volajúceho alebo protokolovací systém o zistenom probléme.
V tomto kóde vyvolávame výnimku, ktorá je zachytená protokolovaním. výnimkou.
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))> |
Výkon :
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.