MST
星途 面试题库

面试题:Python RESTful API错误处理与日志记录的集成及异常场景处理

在一个复杂的Python RESTful API项目中,如何将错误处理机制与日志记录进行深度集成,以便在捕获到各种异常(如数据库连接异常、第三方服务调用失败等)时,既能准确地向客户端返回友好的错误信息,又能在日志中详细记录异常堆栈信息、请求参数等关键数据,从而方便问题排查?请以FastAPI框架为例,给出详细的代码实现思路和关键代码片段。
10.6万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 代码实现思路
    • 使用FastAPI的异常处理机制,通过自定义异常处理器来捕获特定类型的异常。
    • 配置日志记录器,使其能够记录详细的异常信息、请求参数等。
    • 在异常处理器中,结合日志记录器记录关键数据,并向客户端返回友好的错误信息。
  2. 关键代码片段
    • 配置日志记录器
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