logging — journalisation d’événements

Ce module fournit un sous-ensemble léger du paquet logging standard de Python, adapté à MicroPython. Il prend en charge la journalisation par niveaux via des objets Logger à noms hiérarchiques, un petit ensemble de gestionnaires (StreamHandler, FileHandler), le formatage de style printf via Formatter, ainsi que des fonctions utilitaires au niveau du module équivalentes à celles opérant sur le logger racine.

Le module suit l’API familière de CPython d’assez près pour que des applications simples écrites pour la bibliothèque standard fonctionnent sans modification. Les filtres, le verrouillage multi-processus, le format de fichier de configuration et la plupart des classes de gestionnaires ne sont pas fournis.

Constantes de niveau

logging.CRITICAL: int

Valeur numérique 50. Utilisée pour les erreurs irrécupérables.

logging.ERROR: int

Valeur numérique 40. Utilisée pour les problèmes graves.

logging.WARNING: int

Valeur numérique 30. Niveau par défaut d’un logger racine fraîchement configuré.

logging.INFO: int

Valeur numérique 20. Utilisée pour les messages de confirmation.

logging.DEBUG: int

Valeur numérique 10. Utilisée pour la sortie de diagnostic fine.

logging.NOTSET: int

Valeur numérique 0. Indique un logger sans niveau configuré (le niveau effectif est alors hérité du logger racine ou de WARNING).

Fonctions

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

Renvoie le Logger enregistré sous name, en le créant lors de la première utilisation. Si name est None, le logger racine est renvoyé. Le premier appel avec name="root" (ou avec name non défini) invoque implicitement basicConfig pour attacher un StreamHandler par défaut écrivant vers sys.stderr.

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

Journalise un message au niveau level sur le logger racine. Les args sont interpolés dans msg à l’aide du formatage de style printf % ; un unique argument dict est utilisé comme correspondance.

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

Équivalent à getLogger().debug(msg, *args).

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

Équivalent à getLogger().info(msg, *args).

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

Équivalent à getLogger().warning(msg, *args).

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

Équivalent à getLogger().error(msg, *args).

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

Équivalent à getLogger().critical(msg, *args).

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

Équivalent à getLogger().exception(msg, *args, exc_info=exc_info). Journalise le message au niveau ERROR et formate en plus la trace de la pile de l’exception active lorsque exc_info est vrai. Si exc_info est lui-même une BaseException, c’est la trace de cette exception qui est utilisée ; sinon sys.exc_info() est consulté lorsque c’est possible.

logging.shutdown() None

Ferme tous les gestionnaires attachés à tous les loggers connus et oublie les loggers. Enregistré automatiquement via sys.atexit lorsque ce point d’ancrage est disponible.

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

Associe le nom textuel name au niveau numérique level de sorte que Formatter puisse le rendre via %(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

Configure le logger racine avec un unique gestionnaire.

Si filename est fourni, un FileHandler est créé en utilisant filemode et encoding ; sinon un StreamHandler écrivant vers stream (par défaut sys.stderr) est utilisé.

format et datefmt sont transmis à un nouveau Formatter.

level définit à la fois le niveau du gestionnaire et le niveau du logger racine.

Si le logger racine possède déjà des gestionnaires, cette fonction ne fait rien, sauf si force vaut True, auquel cas les gestionnaires existants sont fermés et remplacés.

Classes

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

Un logger nommé. Construisez les loggers via getLogger plutôt que directement, afin que getLogger puisse renvoyer la même instance pour un même nom.

name: str

Le nom pointé du logger.

level: int

Le niveau numérique configuré. 0 (NOTSET) signifie « hériter ».

handlers: list

La liste des instances Handler attachées à ce logger. Lorsqu’elle est vide, les messages sont distribués aux gestionnaires du logger racine.

setLevel(level: int) None

Définit le niveau seuil du logger.

isEnabledFor(level: int) bool

Renvoie True si un message de niveau level serait traité par ce logger.

getEffectiveLevel() int

Renvoie le premier non nul parmi : le niveau de ce logger, le niveau du logger racine ou WARNING.

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

Journalise msg au niveau level. Les args sont interpolés dans msg avec l’opérateur % ; si le premier argument positionnel est un dict, il est utilisé comme correspondance.

debug(msg: str, *args) None

Journalise msg au niveau DEBUG.

info(msg: str, *args) None

Journalise msg au niveau INFO.

warning(msg: str, *args) None

Journalise msg au niveau WARNING.

error(msg: str, *args) None

Journalise msg au niveau ERROR.

critical(msg: str, *args) None

Journalise msg au niveau CRITICAL.

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

Journalise msg au niveau ERROR et, lorsque exc_info est vrai, ajoute la trace de la pile formatée. Si exc_info est une instance de BaseException, c’est la trace de cette exception qui est rendue ; sinon l’exception active est consultée via sys.exc_info().

addHandler(handler: Handler) None

Attache handler à ce logger.

hasHandlers() bool

Renvoie True si au moins un gestionnaire est attaché à ce logger.

class logging.Handler(level: int = NOTSET)

Classe de base de tous les gestionnaires. Les sous-classes implémentent emit().

level: int

Le niveau seuil du gestionnaire.

formatter: 'Formatter | None'

Le Formatter actif, ou None.

setLevel(level: int) None

Définit le niveau seuil du gestionnaire.

setFormatter(formatter: Formatter) None

Attache formatter à ce gestionnaire.

format(record: LogRecord) str

Rend record à l’aide du formateur configuré.

close() None

Libère les ressources détenues par le gestionnaire. Appelé par shutdown et par FileHandler lors de sa fermeture.

class logging.StreamHandler(stream=None)

Gestionnaire qui écrit les enregistrements formatés, suivis de self.terminator ("\n" par défaut), vers stream. stream vaut par défaut sys.stderr.

stream

L’objet flux de destination.

terminator: str

Chaîne ajoutée après chaque enregistrement formaté. Vaut par défaut "\n".

emit(record: LogRecord) None

Écrit record vers stream si son niveau atteint le seuil du gestionnaire.

close() None

Vide le flux sous-jacent lorsqu’il expose une méthode flush.

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

Sous-classe de StreamHandler qui ouvre filename avec les mode et encoding donnés et y écrit les enregistrements formatés. Le fichier sous-jacent est fermé lors de l’appel à close().

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

Rend les instances de LogRecord sous forme de chaînes.

fmt est un modèle de style printf. Les clés reconnues sont %(name)s, %(message)s, %(msecs)d, %(asctime)s et %(levelname)s. Lorsqu’il n’est pas défini, il vaut par défaut "%(levelname)s:%(name)s:%(message)s".

datefmt est le modèle time.strftime utilisé pour rendre %(asctime)s. Vaut par défaut "%Y-%m-%d %H:%M:%S".

usesTime() bool

Renvoie True si le modèle de format fait référence à asctime.

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

Formate record.ct à l’aide de time.strftime et de datefmt. Renvoie None sur les plateformes où time.strftime n’est pas disponible.

format(record: LogRecord) str

Rend record. Si le modèle utilise asctime, formatTime() est invoqué d’abord pour renseigner record.asctime.

class logging.LogRecord

Conteneur des données transmises par un Logger à ses gestionnaires. Les instances sont renseignées via set() ; les implémentations de logger réutilisent un unique enregistrement par logger afin de réduire les allocations.

name: str

Le nom du logger d’origine.

levelno: int

Le niveau numérique de cet enregistrement.

levelname: str

Le nom textuel du niveau.

message: str

Le message de journal entièrement formaté.

ct: float

L’instant de création tel que renvoyé par time.time().

msecs: int

La composante en millisecondes de ct.

asctime: str | None

Horodatage lisible par un humain ; renseigné paresseusement par Formatter.

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

Initialise l’enregistrement avec les valeurs données et capture l’instant courant.