You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI抛出HTTPException时如何让控制台显示完整堆栈追踪?

在FastAPI中记录HTTPException的完整堆栈追踪

FastAPI默认不会为HTTPException记录堆栈追踪,因为它被视为业务预期内的异常。要实现日志中输出完整堆栈,无需通过中间件,推荐用以下两种方式:

方法一:全局自定义异常处理器

通过覆盖默认的HTTPException处理器,统一记录所有此类异常的堆栈信息,同时保持客户端响应正常。

import uvicorn
import logging
import traceback
from fastapi.exceptions import HTTPException
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse

# 初始化日志配置,设置级别为ERROR
logging.basicConfig(
    level=logging.ERROR,
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__)

app = FastAPI()

# 自定义HTTPException处理函数
@app.exception_handler(HTTPException)
async def log_http_exception(request: Request, exc: HTTPException):
    # 记录异常详情及完整堆栈
    logger.error(f"请求路径: {request.url}\n异常信息: {exc.detail}\n堆栈追踪:\n{traceback.format_exc()}")
    # 返回标准HTTPException响应,确保客户端正常接收
    return JSONResponse(
        status_code=exc.status_code,
        content={"detail": exc.detail}
    )

@app.get("/info")
def info():
    try:
        x = 1/0
    except ZeroDivisionError as e:
        raise HTTPException(status_code=400, detail=str(e))

if __name__ == '__main__':
    uvicorn.run(app, port=8000)

方法二:局部手动记录日志

如果仅需在特定接口记录堆栈,可在抛出HTTPException前直接记录当前异常的堆栈:

import uvicorn
import logging
import traceback
from fastapi.exceptions import HTTPException
from fastapi import FastAPI

logging.basicConfig(
    level=logging.ERROR,
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__)

app = FastAPI()

@app.get("/info")
def info():
    try:
        x = 1/0
    except ZeroDivisionError as e:
        # 捕获异常时直接记录堆栈
        logger.error(f"接口/info执行出错\n堆栈追踪:\n{traceback.format_exc()}")
        raise HTTPException(status_code=400, detail=str(e))

if __name__ == '__main__':
    uvicorn.run(app, port=8000)

关键说明

  • 无需使用中间件,FastAPI的异常处理器机制更适合这类需求,符合框架设计逻辑。
  • traceback.format_exc()会返回包含出错文件、行号、调用链的完整堆栈字符串。
  • 可根据需求调整日志格式,比如添加请求方法、客户端IP等信息,提升排查效率。

内容的提问来源于stack exchange,提问作者mikazz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:43:12