Logování
Logování je důležitý nástroj pro diagnostiku a řešení problémů při vývoji programů. Většinou nemáme možnost sledovat přímo na obrazovce uživatelů, jak náš program používají. Když se vyskytne chyba nebo když potřebujeme analyzovat běh aplikace, často se obracíme k logům - záznamům, které aplikace vytváří během svého provozu.
Logování znamená zaznamenávání informací o operacích, které aplikace provádí, a o chybách, které nastaly. Záznamy pak můžeme použít pro ladění chyb, monitorování výkonu, auditování bezpečnosti a mnoho dalších účelů.
Logování v Pythonu
Python obsahuje modul logging
, který je možné pro logování použít. Chceme-li uložit nějakou zprávu, je potřeba pro ni vybrat levelúroveň. Přehled výchozích úrovení je v tabulce níže. Úrovně jsou seřazené od nejnižší po nejvyšší.
Úroveň | Stručný popis |
---|---|
DEBUG | Pro detailní diagnostické informace během vývoje nebo ladění. |
INFO | Potvrzující zprávy o běžném fungování aplikace. |
WARNING | Varování o možných problémech, které by mohly ovlivnit běh programu. |
ERROR | Chybové události, které narušují některé operace aplikace. |
CRITICAL | Velmi vážné problémy, které mohou vyžadovat okamžitou pozornost. |
Úroveň zprávy určuje funkci, kterou použijeme pro zapsání logové zprávy. Výchozí úroveň logování je WARNING
, tj. zprávy nižší úrovně jsou ignorovány. V řadě případů například máme jinou úroveň logování v produkčním a vývojovém prostředí. Ve vývojovém logujeme vše, abychom přesně sledovali, co se s aplikací děje. V produkčním prostředí pak obvykle stačí úroveň INFO
nebo WARNING
.
import logging
logging.warning('Something bad happened.')
logging.debug('This is not important')
Výchozí formát pro logovací zprávy v Pythonu obsahuje úroveň logování, jméno zapisovatele zprávy (výchozí hodnota je 'root'
) a samotnou zprávu. Za je přehled důležitých proměnných, které můžeme do našich logovacích zpráv vložit.
%(name)s
: Název loggeru, který generuje logovací zprávu.%(levelno)s
: Číselné označení úrovně logování (např. 10 pro DEBUG, 20 pro INFO, atd.).%(levelname)s
: Textové označení úrovně logování (např. 'DEBUG', 'INFO').%(pathname)s
: Plná cesta k souboru, ve kterém byl logger volán.%(filename)s
: Název souboru, ve kterém byl logger volán.%(module)s
: Název modulu, ve kterém byl logger volán.%(funcName)s
: Název funkce/metody, ve které byl logger volán.%(lineno)d
: Číslo řádku, na kterém byl logger volán.%(asctime)s
: Časové razítko vytvoření logovací zprávy.%(message)s
: Text logovací zprávy.%(thread)d
: ID vlákna, ve kterém byl logger volán.%(threadName)s
: Název vlákna, ve kterém byl logger volán.%(process)d
: ID procesu, ve kterém byl logger volán.
Vyzkoušejme nyní nastavit logování zpráv od úrovně DEBUG
a v jiném formátu. Písmeno za závorkou označuje typ hodnoty. Dále nastavíme ukládání do souboru app.log
.
logging.basicConfig(level=logging.DEBUG, filename="app.log", filemode="w",
format="%(asctime)s - %(levelname)s - [%(filename)s:%(lineno)d] %(funcName)s(): %(message)s")
logging.warning('This will get logged to a file')
Toto nastavení pak generuje logovací zprávy ve formátu:
2024-03-31 21:48:59,329 - WARNING - [program.py:5] <module>(): This will get logged to a file
Pokud do logovací zprávy chceme vložit hdonotu nějaké proměnné, můžeme využít formátované řetězce.