in app/observability.py [0:0]
def setup_structured_logging() -> None:
LoggingInstrumentor().instrument()
handler = [
"console-pretty" if settings.environment == "development" else "console-mozlog"
]
dictConfig(
{
"version": 1,
"formatters": {
"json": {
"()": JsonFormatter,
"format": "%(asctime)s %(name)s %(levelname)s %(message)s %(otelTraceID)s %(otelSpanID)s %(otelTraceSampled)s",
"rename_fields": {
"levelname": "severity",
"asctime": "timestamp",
"otelTraceID": "logging.googleapis.com/trace",
"otelSpanID": "logging.googleapis.com/spanId",
"otelTraceSampled": "logging.googleapis.com/trace_sampled",
},
"datefmt": "%Y-%m-%dT%H:%M:%SZ",
},
"text": {
"format": "%(message)s",
},
},
"handlers": {
"console-mozlog": {
"level": logging.INFO,
"class": "logging.StreamHandler",
"formatter": "json",
"stream": sys.stdout,
},
"console-pretty": {
"level": logging.INFO,
"class": "rich.logging.RichHandler",
"formatter": "text",
},
},
"loggers": {
"app": {
"handlers": handler,
"propagate": True,
"level": logging.INFO,
},
"uvicorn": {
"handlers": handler,
"propagate": True,
"level": logging.INFO,
},
"fastapi": {
"handlers": handler,
"propagate": True,
"level": logging.INFO,
},
},
}
)