## 4.4 Implementation - Global Exception Handling (FastAPI) Claude Code MUST implement global exception handling using FastAPI decorators. --- ### Step 1: Import from fastapi import Request, HTTPException from fastapi.responses import JSONResponse import traceback --- ### Step 2: Handle HTTPException @app.exception_handler(HTTPException) async def http_exception_handler(request: Request, exc: HTTPException): request_id = getattr(request.state, "request_id", "-") api_logger.warning( "[%s] %s %s %s %s", request_id, request.method, request.url.path, exc.status_code, str(exc.detail), ) return JSONResponse( status_code=exc.status_code, content={ "message": str(exc.detail), "request_id": request_id, }, ) --- ### Step 3: Handle Unhandled Exception @app.exception_handler(Exception) async def global_exception_handler(request: Request, exc: Exception): request_id = getattr(request.state, "request_id", "-") tb = "".join(traceback.format_exception(type(exc), exc, exc.__traceback__)) api_logger.error( "[%s] %s %s unhandled exception\n%s", request_id, request.method, request.url.path, tb, ) return JSONResponse( status_code=500, content={ "message": "Internal server error", "request_id": request_id, }, ) --- ### Step 4: Requirements - MUST use `@app.exception_handler` - MUST NOT let exceptions go unlogged - MUST include request_id in all logs - MUST include traceback for ERROR logs - MUST NOT expose traceback in response