Kódím.cz
5

Logování

Log je v podstatě deník aplikace, kam si zaznamenává informace o své činnosti

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.

Cvičení