Přihlášení v Pythonu

Přihlášení v Pythonu

Protokolování je prostředek ke sledování událostí, ke kterým dochází při spuštění nějakého softwaru. Protokolování je důležité pro vývoj softwaru, ladění a běh. Pokud nemáte žádný záznam a váš program se zhroutí, je velmi málo šancí, že odhalíte příčinu problému. A pokud odhalíte příčinu, zabere to spoustu času. S protokolováním můžete zanechat stopu ve strouhankách, takže pokud se něco pokazí, můžeme určit příčinu problému.

Existuje řada situací, jako když očekáváte celé číslo, bylo vám přiděleno plovoucí číslo a můžete zamračit API , služba je mimo provoz z důvodu údržby a mnoho dalšího. Takové problémy jsou mimo kontrolu a je těžké je určit.

Proč příkaz print není Pythonic

Někteří vývojáři používají koncept tisku příkazů k ověření, zda jsou příkazy provedeny správně nebo zda došlo k nějaké chybě. Tisk ale není dobrý nápad. U jednoduchých skriptů to může vyřešit vaše problémy, ale u složitých skriptů způsob tisku selže.
Python má vestavěný modul protokolování což umožňuje zápis stavových zpráv do souboru nebo jakéhokoli jiného výstupního proudu. Soubor může obsahovat informace o tom, která část kódu se provádí a jaké problémy nastaly.

Úrovně protokolování Pythonu

Existuje pět vestavěných úrovní zprávy protokolu.

  • Ladit: Používají se k poskytování podrobných informací, které jsou obvykle zajímavé pouze při diagnostice problémů.
  • Info: Používají se k potvrzení, že věci fungují podle očekávání
  • Varování: Používají se jako indikace toho, že se stalo něco neočekávaného, ​​nebo naznačuje nějaký problém v blízké budoucnosti
  • Chyba: To znamená, že kvůli závažnějšímu problému nebyl software schopen provést nějakou funkci
  • kritické: To znamená vážnou chybu, která naznačuje, že samotný program nemusí být schopen pokračovat v běhu

V případě potřeby mají vývojáři možnost vytvořit více úrovní, ale ty jsou dostatečné pro zvládnutí každé možné situace. Každé vestavěné úrovni byla přiřazena její číselná hodnota.

Logovací modul je nabitý několika funkcemi. Má několik konstant, tříd a metod. Položky s velkými písmeny jsou konstantní, položky s velkými písmeny jsou třídy a položky, které začínají malými písmeny, jsou metody.

Samotný základní Handler nabízí několik objektů loggeru.

  • Logger.info(msg): Tím se zaprotokoluje zpráva s úrovní INFO na tomto zapisovači.
  • Logger.warning(msg): Tím se zaprotokoluje zpráva s úrovní VAROVÁNÍ na tomto zapisovači.
  • Logger.error(msg): Tím se na tomto zapisovači zaprotokoluje zpráva s úrovní ERROR.
  • Logger.critical(msg): Tím se na tomto zapisovači zaprotokoluje zpráva s úrovní KRITICKÉ.
  • Logger.log(lvl,msg): Tím se zaprotokoluje zpráva s celočíselnou úrovní lvl na tomto zapisovači.
  • Logger.exception(msg): Tím se na tomto zapisovači zaprotokoluje zpráva s úrovní ERROR.
  • Logger.setLevel(lvl): Tato funkce nastavuje práh tohoto záznamníku na lvl. To znamená, že všechny zprávy pod touto úrovní budou ignorovány.
  • Logger.addFilter(filt): Tím se do tohoto zapisovače přidá specifický filtr.
  • Logger.removeFilter(filt): Tím se odstraní konkrétní filtr, který se hodí do tohoto loggeru.
  • Logger.filter(záznam): Tato metoda aplikuje filtr loggeru na poskytnutý záznam a vrátí True, pokud má být záznam zpracován. Jinak vrátí False.
  • Logger.addHandler(hdlr): Tím se do tohoto loggeru přidá specifický obslužný program hdlr.
  • Logger.removeHandler(hdlr) : Toto odebere konkrétní obslužný program hdlr do tohoto loggeru.
  • Logger.hasHandlers(): To zkontroluje, zda má záznamník nakonfigurován nějaký handler nebo ne.

Užitečné manipulátory

Kromě základní třídy Handler Class je k dispozici mnoho užitečných podtříd.

Psovod

Popis

StreamHandler Odesílá zprávy do streamů (objekty podobné souborům).
FileHandler Odesílá zprávy do souborů na disku.
BaseRotatingHandler Základní třída pro handlery, které rotují soubory protokolu v určitém bodě. Použití RotatingFileHandler nebo TimedRotatingFileHandler namísto.
RotatingFileHandler Odesílá zprávy do souborů na disku s podporou maximální velikosti souborů protokolu a rotace souborů protokolu.
TimedRotatingFileHandler Odesílá zprávy do souborů na disku a otáčí soubor protokolu v určitých časových intervalech.
SocketHandler Odesílá zprávy do soketů TCP/IP. Podporuje také unixové doménové sokety od Pythonu 3.4.
DatagramHandler Odesílá zprávy do UDP soketů. Podporuje také unixové doménové sokety od Pythonu 3.4.
SMTPHandler Odesílá zprávy na určenou e-mailovou adresu.
SysLogHandler Odesílá zprávy unixovému démonovi Syslogthe, případně na vzdáleném počítači.
NTEventLogHandler Odesílá zprávy do protokolu událostí Windows NT/2000/XP.
MemoryHandler Odesílá zprávy do vyrovnávací paměti v paměti, která se vyprázdní vždy, když jsou splněna určitá kritéria.
HTTPHandler Odesílá zprávy na server HTTP pomocí sémantiky GET nebo POST.
WatchedFileHandler Sleduje soubor, ke kterému se přihlašuje. Pokud se soubor změní, zavře se a znovu otevře pomocí názvu souboru.
QueueHandler Odesílá zprávy do fronty, jako jsou ty implementované ve frontě nebo v modulech multiprocessingu.
NullHandler Nedělá nic s chybovými zprávami. Používají vývojáři knihoven, aby se vyhnuli zprávě „Pro logger nebyly nalezeny žádné ovladače“.

Základy protokolování Pythonu

Základy použití logovacího modulu pro záznam událostí do souboru jsou velmi jednoduché. K tomu jednoduše importujte modul z knihovny.

  1. Vytvořte a nakonfigurujte záznamník. Může mít několik parametrů. Ale co je důležité, předejte název souboru, do kterého chcete události zaznamenat.
  2. Zde lze také nastavit formát loggeru. Ve výchozím nastavení soubor funguje v připojit režim, ale v případě potřeby jej můžeme změnit na režim zápisu.
  3. Také lze nastavit úroveň záznamníku, která funguje jako práh pro sledování na základě číselných hodnot přiřazených každé úrovni.
    Existuje několik atributů, které lze předat jako parametry.
  4. Seznam všech těchto parametrů je uveden v Knihovna Python . Uživatel si může vybrat požadovaný atribut podle požadavku.
    Poté vytvořte objekt a použijte různé metody, jak je uvedeno v příkladu.

Protokolování proměnné

Tento kód ukazuje, jak zaznamenat chybovou zprávu. Funkce logging.error() se používá k protokolování chybové zprávy se zástupným symbolem %s pro název proměnné.

Python3




import> logging> name> => 'GFG'> logging.error(> '%s raised an error'> , name)>

Výstup :

ERROR:root:GFG raised an error 

Logování všech úrovní

Tento kód ukazuje všechny úrovně protokolování.

Krajta




# 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'> )>

Výše uvedený kód vygeneruje soubor se zadaným názvem a pokud soubor otevřeme, soubor obsahuje následující data.

Základy protokolování Pythonu

Konfigurace protokolování

Přihlášení do souboru: 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] 

Příklad:

Kód nastaví systém protokolování pomocí konfigurace z temp.conf soubor. Získá logger s názvem jednoduchý příklad a protokoluje zprávy s různými úrovněmi 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ýstup :

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ýjimka protokolování Pythonu

Vyvolávání výjimek během protokolování může být užitečné v určitých scénářích k označení výjimečných podmínek nebo chyb ve vaší aplikaci. Vyvoláním výjimky můžete zastavit normální tok provádění a upozornit volajícího nebo systém protokolování o zjištěném problému.

V tomto kódu vyvoláváme výjimku, která je zachycena protokolováním. výjimka.

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ýstup :

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.