logging — protokolování událostí#

Tento modul poskytuje odlehčenou podmnožinu standardního balíčku logging z jazyka Python přizpůsobenou pro MicroPython. Podporuje úrovňové protokolování prostřednictvím hierarchicky pojmenovaných objektů Logger, malou sadu obslužných rutin (StreamHandler, FileHandler), formátování ve stylu printf přes Formatter a funkce na úrovni modulu odpovídající těm, které pracují s kořenovým loggerem.

Modul dostatečně přesně kopíruje známé CPython API, takže jednoduché aplikace napsané pro standardní knihovnu by měly fungovat beze změn. Filtry, zamykání mezi více procesy, formát konfiguračního souboru a většina tříd obslužných rutin nejsou k dispozici.

Konstanty úrovní#

logging.CRITICAL: int#

Číselná hodnota 50. Používá se pro neopravitelné chyby.

logging.ERROR: int#

Číselná hodnota 40. Používá se pro vážné problémy.

logging.WARNING: int#

Číselná hodnota 30. Výchozí úroveň pro čerstvě nakonfigurovaný kořenový logger.

logging.INFO: int#

Číselná hodnota 20. Používá se pro potvrzovací zprávy.

logging.DEBUG: int#

Číselná hodnota 10. Používá se pro podrobný diagnostický výstup.

logging.NOTSET: int#

Číselná hodnota 0. Označuje logger bez nastavené úrovně (efektivní úroveň se pak dědí od kořenového loggeru nebo z WARNING).

Funkce#

logging.getLogger(name: str | None = None) Logger#

Vrátí Logger registrovaný pod jménem name a při prvním použití jej vytvoří. Pokud je name None, vrátí se kořenový logger. První volání s name="root" (nebo s nenastaveným name) implicitně vyvolá basicConfig, aby připojilo výchozí StreamHandler zapisující do sys.stderr.

logging.log(level: int, msg: str, *args) None#

Zaprotokoluje zprávu na úrovni level v kořenovém loggeru. args se interpolují do msg pomocí formátování % ve stylu printf; jediný argument typu dict se použije jako mapování.

logging.debug(msg: str, *args) None#

Ekvivalent getLogger().debug(msg, *args).

logging.info(msg: str, *args) None#

Ekvivalent getLogger().info(msg, *args).

logging.warning(msg: str, *args) None#

Ekvivalent getLogger().warning(msg, *args).

logging.error(msg: str, *args) None#

Ekvivalent getLogger().error(msg, *args).

logging.critical(msg: str, *args) None#

Ekvivalent getLogger().critical(msg, *args).

logging.exception(msg: str, *args, exc_info: bool | BaseException = True) None#

Ekvivalent getLogger().exception(msg, *args, exc_info=exc_info). Zaprotokoluje zprávu na úrovni ERROR a navíc zformátuje traceback aktivní výjimky, je-li exc_info pravdivé. Pokud je exc_info samo o sobě BaseException, použije se traceback této výjimky; jinak se, je-li to možné, použije sys.exc_info().

logging.shutdown() None#

Zavře každou obslužnou rutinu připojenou ke každému známému loggeru a zapomene loggery. Automaticky se registruje prostřednictvím sys.atexit, je-li tento hook k dispozici.

logging.addLevelName(level: int, name: str) None#

Přiřadí textové jméno name číselné úrovni level, aby je Formatter mohl vykreslit pomocí %(levelname)s.

logging.basicConfig(filename: str | None = None, filemode: str = 'a', format: str | None = None, datefmt: str | None = None, level: int = WARNING, stream=None, encoding: str = 'UTF-8', force: bool = False) None#

Nakonfiguruje kořenový logger s jedinou obslužnou rutinou.

Je-li zadán filename, vytvoří se FileHandler používající filemode a encoding; jinak se použije StreamHandler zapisující do stream (výchozí sys.stderr).

format a datefmt se předají novému objektu Formatter.

level nastaví úroveň obslužné rutiny i úroveň kořenového loggeru.

Pokud kořenový logger již má obslužné rutiny, je tato funkce bez efektu, ledaže je force True, v kterémžto případě se stávající obslužné rutiny zavřou a nahradí.

Třídy#

class logging.Logger(name: str, level: int = NOTSET)#

Pojmenovaný logger. Loggery vytvářejte přes getLogger, nikoli přímo, aby getLogger mohl pro stejné jméno vracet stejnou instanci.

name: str#

Tečkované jméno loggeru.

level: int#

Nakonfigurovaná číselná úroveň. 0 (NOTSET) znamená „dědit“.

handlers: list#

Seznam instancí Handler připojených k tomuto loggeru. Je-li prázdný, zprávy se odesílají obslužným rutinám kořenového loggeru.

setLevel(level: int) None#

Nastaví prahovou úroveň loggeru.

isEnabledFor(level: int) bool#

Vrátí True, pokud by zpráva úrovně level byla tímto loggerem zpracována.

getEffectiveLevel() int#

Vrátí první nenulovou z hodnot: úroveň tohoto loggeru, úroveň kořenového loggeru nebo WARNING.

log(level: int, msg: str, *args) None#

Zaprotokoluje msg na úrovni level. args se interpolují do msg operátorem %; je-li první poziční argument dict, použije se jako mapování.

debug(msg: str, *args) None#

Zaprotokoluje msg na úrovni DEBUG.

info(msg: str, *args) None#

Zaprotokoluje msg na úrovni INFO.

warning(msg: str, *args) None#

Zaprotokoluje msg na úrovni WARNING.

error(msg: str, *args) None#

Zaprotokoluje msg na úrovni ERROR.

critical(msg: str, *args) None#

Zaprotokoluje msg na úrovni CRITICAL.

exception(msg: str, *args, exc_info: bool | BaseException = True) None#

Zaprotokoluje msg na úrovni ERROR a, je-li exc_info pravdivé, připojí zformátovaný traceback. Pokud je exc_info instance BaseException, vykreslí se traceback této výjimky; jinak se aktivní výjimka získá přes sys.exc_info().

addHandler(handler: Handler) None#

Připojí handler k tomuto loggeru.

hasHandlers() bool#

Vrátí True, pokud jsou k tomuto loggeru připojeny nějaké obslužné rutiny.

class logging.Handler(level: int = NOTSET)#

Základní třída pro všechny obslužné rutiny. Podtřídy implementují emit().

level: int#

Prahová úroveň obslužné rutiny.

formatter: 'Formatter | None'#

Aktivní Formatter, nebo None.

setLevel(level: int) None#

Nastaví prahovou úroveň obslužné rutiny.

setFormatter(formatter: Formatter) None#

Připojí formatter k této obslužné rutině.

format(record: LogRecord) str#

Vykreslí record pomocí nakonfigurovaného formátovače.

close() None#

Uvolní prostředky držené obslužnou rutinou. Volá se z shutdown a z FileHandler, když je zavírána.

class logging.StreamHandler(stream=None)#

Obslužná rutina, která zapisuje zformátované záznamy následované self.terminator (ve výchozím stavu "\n") do stream. stream je ve výchozím stavu sys.stderr.

stream#

Cílový objekt streamu.

terminator: str#

Řetězec připojovaný za každý zformátovaný záznam. Výchozí hodnota je "\n".

emit(record: LogRecord) None#

Zapíše record do stream, pokud jeho úroveň dosahuje prahu obslužné rutiny.

close() None#

Vyprázdní podkladový stream, pokud poskytuje metodu flush.

class logging.FileHandler(filename: str, mode: str = 'a', encoding: str = 'UTF-8')#

Podtřída StreamHandler, která otevře filename s daným mode a encoding a zapisuje do něj zformátované záznamy. Podkladový soubor se zavře při close().

class logging.Formatter(fmt: str | None = None, datefmt: str | None = None)#

Vykresluje instance LogRecord do řetězců.

fmt je šablona ve stylu printf. Rozpoznávané klíče jsou %(name)s, %(message)s, %(msecs)d, %(asctime)s a %(levelname)s. Není-li nastaven, použije se výchozí "%(levelname)s:%(name)s:%(message)s".

datefmt je šablona time.strftime použitá k vykreslení %(asctime)s. Výchozí hodnota je "%Y-%m-%d %H:%M:%S".

usesTime() bool#

Vrátí True, pokud formátovací šablona odkazuje na asctime.

formatTime(datefmt: str, record: LogRecord) str | None#

Zformátuje record.ct pomocí time.strftime a datefmt. Na platformách, kde time.strftime není k dispozici, vrátí None.

format(record: LogRecord) str#

Vykreslí record. Pokud šablona používá asctime, nejprve se vyvolá formatTime(), aby naplnila record.asctime.

class logging.LogRecord#

Kontejner pro data předávaná z Logger jeho obslužným rutinám. Instance se plní prostřednictvím set(); implementace loggeru opakovaně používají jediný záznam na logger, aby se omezily alokace.

name: str#

Jméno původního loggeru.

levelno: int#

Číselná úroveň tohoto záznamu.

levelname: str#

Textový název úrovně.

message: str#

Plně zformátovaná zpráva protokolu.

ct: float#

Čas vytvoření vrácený funkcí time.time().

msecs: int#

Milisekundová složka ct.

asctime: str | None#

Časová značka čitelná člověkem; naplňuje se líně objektem Formatter.

set(name: str, level: int, message: str) None#

Inicializuje záznam danými hodnotami a zachytí aktuální čas.