← retour aux snippets

logging.LoggerAdapter: ajouter un contexte au logger

Injecter des champs contextuels sans dupliquer le formatage.

python logging #logging#context

objectif

Injecter des champs contextuels sans dupliquer le formatage.

code minimal

import logging, io
buf = io.StringIO()
h = logging.StreamHandler(buf)
fmt = logging.Formatter("%(levelname)s %(message)s [user=%(user)s]")
log = logging.getLogger("app"); log.setLevel(logging.INFO); log.handlers[:] = [h]
adapter = logging.LoggerAdapter(log, extra={"user":"alice"})
adapter.info("ok")
out = buf.getvalue()
print("user=alice" in out)  # attendu: True

utilisation

import logging
base = logging.getLogger("svc")
ctx = logging.LoggerAdapter(base, {"request_id":"abc"})
ctx.warning("oops")
print(hasattr(ctx, "info"))

variante(s) utile(s)

import logging
print(isinstance(logging.LoggerAdapter(logging.getLogger(), {}), logging.LoggerAdapter))

notes

  • LoggerAdapter ajoute/merge extra à chaque appel.
  • Centralisez le formatage au niveau du handler/formatter.