Structured JSON Logging Setup
Configure a JSON formatter so every log record carries consistent fields, making logs searchable and correlatable across services.
Code
import json
import logging
import sys
from datetime import datetime, timezone
class JsonFormatter(logging.Formatter):
def format(self, record: logging.LogRecord) -> str:
payload = {
"level": record.levelname,
"message": record.getMessage(),
"logger": record.name,
"timestamp": datetime.now(timezone.utc).isoformat(),
}
if record.exc_info:
payload["exception"] = self.formatException(record.exc_info)
return json.dumps(payload)
def configure_logging(level: str = "INFO") -> logging.Logger:
logger = logging.getLogger("app")
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(JsonFormatter())
logger.addHandler(handler)
logger.setLevel(level)
return loggerReport a problem with this exampleOpens a pre-filled issue on GitHub.