Spotix-API / backend /app /core /logging_middleware.py
Anish-530
Fixed Mobile support. Added a new AI media detection mechanism by Farid, that creates geometric lines. Fixed logs
817ad83
import time
import os
from fastapi import Request
from starlette.middleware.base import BaseHTTPMiddleware
from app.core.logger import logger
# Paths that are too noisy to log at INFO β€” only log if they error
_QUIET_PATHS = frozenset(["/health", "/favicon.ico", "/metrics", "/docs", "/openapi.json", "/redoc"])
class APILoggingMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next):
start_time = time.perf_counter()
path = request.url.path
method = request.method
try:
response = await call_next(request)
except Exception as exc:
duration_ms = round((time.perf_counter() - start_time) * 1000, 1)
logger.bind(
method=method,
path=path,
status=500,
duration_ms=duration_ms,
).error(f"Unhandled exception on {method} {path} β€” {type(exc).__name__}: {exc}")
raise
duration_ms = round((time.perf_counter() - start_time) * 1000, 1)
status = response.status_code
# Suppress noisy health-check / static paths unless they error
if path in _QUIET_PATHS and status < 400:
return response
# Route logs by severity so production dashboards can filter cleanly
bound = logger.bind(method=method, path=path, status=status, duration_ms=duration_ms)
if status >= 500:
bound.error(f"{method} {path} β†’ {status} ({duration_ms}ms)")
elif status >= 400:
# 401 on /auth/me is expected background noise β€” demote to DEBUG
if path == "/auth/me" and status == 401:
bound.debug(f"{method} {path} β†’ {status} ({duration_ms}ms)")
else:
bound.warning(f"{method} {path} β†’ {status} ({duration_ms}ms)")
else:
bound.info(f"{method} {path} β†’ {status} ({duration_ms}ms)")
return response