← retour aux snippets

logging: dictConfig console et fichier

Configurer le logging via un dictionnaire sérialisable JSON/YAML.

objectif

Configurer le logging via un dictionnaire sérialisable JSON/YAML.

code minimal

import logging, logging.config, io, tempfile, pathlib

log_path = pathlib.Path(tempfile.gettempdir()) / "app.log"
cfg = {
    "version": 1,
    "formatters": {"f": {"format": "%(levelname)s %(name)s: %(message)s"}},
    "handlers": {
        "console": {"class": "logging.StreamHandler", "formatter": "f", "stream": "ext://sys.stdout"},
        "file": {"class": "logging.FileHandler", "formatter": "f", "filename": str(log_path), "encoding": "utf-8"},
    },
    "root": {"level": "INFO", "handlers": ["console", "file"]},
}
logging.config.dictConfig(cfg)
logging.getLogger("x").info("hi")
print(log_path.exists())  # attendu: True

utilisation

import logging
logging.getLogger().warning("warn")
print(True)

variante(s) utile(s)

import logging, logging.config
cfg = {"version":1, "handlers":{"null":{"class":"logging.NullHandler"}}, "root":{"handlers":["null"],"level":"INFO"}}
logging.config.dictConfig(cfg)
print(True)

notes

  • dictConfig est facilement sérialisable et versionnable.
  • Utilisez NullHandler dans les libs pour éviter la config forcée.