logging — Ereignisprotokollierung

Dieses Modul stellt eine schlanke Teilmenge des Standard-Python-Pakets logging bereit, angepasst für MicroPython. Es unterstützt stufenbasierte Protokollierung über hierarchisch benannte Logger-Objekte, eine kleine Auswahl an Handlern (StreamHandler, FileHandler), Formatierung im printf-Stil über Formatter sowie Komfortfunktionen auf Modulebene, die denen entsprechen, die auf dem Root-Logger arbeiten.

Das Modul orientiert sich so eng an der vertrauten CPython-API, dass einfache Anwendungen, die für die Standardbibliothek geschrieben wurden, unverändert funktionieren sollten. Filter, Mehrprozess-Sperren, das Format der Konfigurationsdatei und die meisten Handler-Klassen werden nicht bereitgestellt.

Stufenkonstanten

logging.CRITICAL: int

Numerischer Wert 50. Wird für nicht behebbare Fehler verwendet.

logging.ERROR: int

Numerischer Wert 40. Wird für schwerwiegende Probleme verwendet.

logging.WARNING: int

Numerischer Wert 30. Standardstufe für einen frisch konfigurierten Root-Logger.

logging.INFO: int

Numerischer Wert 20. Wird für Bestätigungsmeldungen verwendet.

logging.DEBUG: int

Numerischer Wert 10. Wird für feingranulare Diagnoseausgaben verwendet.

logging.NOTSET: int

Numerischer Wert 0. Zeigt einen Logger ohne konfigurierte Stufe an (die effektive Stufe wird dann vom Root-Logger oder von WARNING geerbt).

Funktionen

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

Gibt den unter name registrierten Logger zurück und erstellt ihn bei der ersten Verwendung. Wenn name gleich None ist, wird der Root-Logger zurückgegeben. Der erste Aufruf mit name="root" (oder ohne gesetzten name) ruft implizit basicConfig auf, um einen Standard-StreamHandler anzuhängen, der nach sys.stderr schreibt.

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

Protokolliert eine Meldung auf der Stufe level auf dem Root-Logger. args werden mittels printf-artiger %-Formatierung in msg eingesetzt; ein einzelnes dict-Argument wird als Mapping verwendet.

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

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

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

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

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

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

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

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

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

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

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

Entspricht getLogger().exception(msg, *args, exc_info=exc_info). Protokolliert die Meldung auf ERROR und formatiert zusätzlich den Traceback der aktiven Ausnahme, wenn exc_info wahr ist. Wenn exc_info selbst eine BaseException ist, wird der Traceback dieser Ausnahme verwendet; andernfalls wird sys.exc_info() herangezogen, sofern verfügbar.

logging.shutdown() None

Schließt jeden Handler, der an jeden bekannten Logger angehängt ist, und verwirft die Logger. Wird automatisch über sys.atexit registriert, wenn dieser Hook verfügbar ist.

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

Verknüpft den textuellen name mit der numerischen Stufe level, sodass Formatter sie über %(levelname)s darstellen kann.

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

Konfiguriert den Root-Logger mit einem einzelnen Handler.

Wenn filename angegeben ist, wird ein FileHandler unter Verwendung von filemode und encoding erstellt; andernfalls wird ein StreamHandler verwendet, der nach stream (standardmäßig sys.stderr) schreibt.

format und datefmt werden an einen neuen Formatter durchgereicht.

level setzt sowohl die Stufe des Handlers als auch die Stufe des Root-Loggers.

Wenn der Root-Logger bereits Handler besitzt, ist diese Funktion ein No-Op, es sei denn, force ist True; in diesem Fall werden die vorhandenen Handler geschlossen und ersetzt.

Klassen

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

Ein benannter Logger. Erstellen Sie Logger über getLogger statt direkt, damit getLogger für denselben Namen dieselbe Instanz zurückgeben kann.

name: str

Der punktnotierte Name des Loggers.

level: int

Die konfigurierte numerische Stufe. 0 (NOTSET) bedeutet „erben“.

handlers: list

Die Liste der Handler-Instanzen, die an diesen Logger angehängt sind. Wenn sie leer ist, werden Meldungen an die Handler des Root-Loggers weitergeleitet.

setLevel(level: int) None

Setzt die Schwellenstufe des Loggers.

isEnabledFor(level: int) bool

Gibt True zurück, wenn eine Meldung der Stufe level von diesem Logger verarbeitet würde.

getEffectiveLevel() int

Gibt den ersten von null verschiedenen Wert zurück: die Stufe dieses Loggers, die Stufe des Root-Loggers oder WARNING.

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

Protokolliert msg auf der Stufe level. args werden mit dem %-Operator in msg eingesetzt; wenn das erste Positionsargument ein dict ist, wird es als Mapping verwendet.

debug(msg: str, *args) None

Protokolliert msg auf DEBUG.

info(msg: str, *args) None

Protokolliert msg auf INFO.

warning(msg: str, *args) None

Protokolliert msg auf WARNING.

error(msg: str, *args) None

Protokolliert msg auf ERROR.

critical(msg: str, *args) None

Protokolliert msg auf CRITICAL.

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

Protokolliert msg auf ERROR und hängt, wenn exc_info wahr ist, den formatierten Traceback an. Wenn exc_info eine BaseException-Instanz ist, wird der Traceback dieser Ausnahme dargestellt; andernfalls wird die aktive Ausnahme über sys.exc_info() herangezogen.

addHandler(handler: Handler) None

Hängt handler an diesen Logger an.

hasHandlers() bool

Gibt True zurück, wenn an diesen Logger irgendwelche Handler angehängt sind.

class logging.Handler(level: int = NOTSET)

Basisklasse für alle Handler. Unterklassen implementieren emit().

level: int

Die Schwellenstufe des Handlers.

formatter: 'Formatter | None'

Der aktive Formatter oder None.

setLevel(level: int) None

Setzt die Schwellenstufe des Handlers.

setFormatter(formatter: Formatter) None

Hängt formatter an diesen Handler an.

format(record: LogRecord) str

Stellt record unter Verwendung des konfigurierten Formatters dar.

close() None

Gibt vom Handler gehaltene Ressourcen frei. Wird von shutdown und von FileHandler aufgerufen, wenn dieser geschlossen wird.

class logging.StreamHandler(stream=None)

Handler, der formatierte Einträge, gefolgt von self.terminator (standardmäßig "\n"), nach stream schreibt. stream ist standardmäßig sys.stderr.

stream

Das Ziel-Stream-Objekt.

terminator: str

Zeichenkette, die nach jedem formatierten Eintrag angehängt wird. Standardmäßig "\n".

emit(record: LogRecord) None

Schreibt record nach stream, wenn seine Stufe die Schwelle des Handlers erreicht.

close() None

Leert den zugrunde liegenden Stream, wenn er eine flush-Methode bereitstellt.

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

StreamHandler-Unterklasse, die filename mit dem angegebenen mode und encoding öffnet und formatierte Einträge dorthin schreibt. Die zugrunde liegende Datei wird bei close() geschlossen.

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

Stellt LogRecord-Instanzen als Zeichenketten dar.

fmt ist eine Vorlage im printf-Stil. Erkannte Schlüssel sind %(name)s, %(message)s, %(msecs)d, %(asctime)s und %(levelname)s. Ohne Angabe wird standardmäßig "%(levelname)s:%(name)s:%(message)s" verwendet.

datefmt ist die time.strftime-Vorlage, die zur Darstellung von %(asctime)s verwendet wird. Standardmäßig "%Y-%m-%d %H:%M:%S".

usesTime() bool

Gibt True zurück, wenn die Formatvorlage auf asctime verweist.

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

Formatiert record.ct mit time.strftime und datefmt. Gibt None zurück auf Plattformen, auf denen time.strftime nicht verfügbar ist.

format(record: LogRecord) str

Stellt record dar. Wenn die Vorlage asctime verwendet, wird zuerst formatTime() aufgerufen, um record.asctime zu füllen.

class logging.LogRecord

Container für die Daten, die von einem Logger an seine Handler übergeben werden. Instanzen werden über set() befüllt; Logger-Implementierungen verwenden einen einzelnen Record pro Logger wieder, um Allokationen zu reduzieren.

name: str

Der Name des ursprünglichen Loggers.

levelno: int

Numerische Stufe dieses Records.

levelname: str

Textueller Stufenname.

message: str

Die vollständig formatierte Protokollmeldung.

ct: float

Erstellungszeit, wie von time.time() zurückgegeben.

msecs: int

Millisekundenanteil von ct.

asctime: str | None

Menschenlesbarer Zeitstempel; wird von Formatter verzögert (lazy) befüllt.

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

Initialisiert den Record mit den angegebenen Werten und erfasst die aktuelle Zeit.