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.