File size: 1,250 Bytes
3275441 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | """Xavante - logging_utils.py - Logging estruturado com contexto."""
from __future__ import annotations
import json
import logging
import sys
from datetime import datetime
from typing import Any
class JSONFormatter(logging.Formatter):
def format(self, record: logging.LogRecord) -> str:
log_entry = {
"timestamp": datetime.utcnow().isoformat() + "Z",
"level": record.levelname,
"logger": record.name,
"message": record.getMessage(),
}
if hasattr(record, "context"):
log_entry["context"] = record.context
return json.dumps(log_entry, default=str)
def setup_logging(level: int = logging.INFO, json_output: bool = False) -> None:
root = logging.getLogger()
root.setLevel(level)
for h in list(root.handlers):
root.removeHandler(h)
handler = logging.StreamHandler(sys.stdout)
if json_output:
handler.setFormatter(JSONFormatter())
else:
handler.setFormatter(
logging.Formatter(
"[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
)
root.addHandler(handler)
__all__ = ["JSONFormatter", "setup_logging"]
|