- 代码实现思路:
- 使用FastAPI的异常处理机制,通过自定义异常处理器来捕获特定类型的异常。
- 配置日志记录器,使其能够记录详细的异常信息、请求参数等。
- 在异常处理器中,结合日志记录器记录关键数据,并向客户端返回友好的错误信息。
- 关键代码片段:
import logging
logging.basicConfig(
level = logging.ERROR,
format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
app = FastAPI()
@app.exception_handler(Exception)
async def global_exception_handler(request: Request, exc: Exception):
# 记录请求参数
try:
body = await request.json()
except:
body = None
logger.error(f"Request body: {body}, Exception: {str(exc)}", exc_info = True)
return JSONResponse(
status_code = 500,
content = {"message": "An internal server error occurred. Please try again later."}
)
@app.get("/example")
async def example_route():
try:
# 模拟数据库连接异常
raise ConnectionError("Database connection failed")
except ConnectionError as e:
raise e