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

FastAPI全局异常处理器无法打印异常堆栈追踪问题求助

FastAPI全局异常处理器堆栈追踪日志问题解决方法

针对你遇到的全局异常处理器无法输出异常堆栈追踪的问题,可以尝试以下几种解决方式:

  • 利用日志模块的原生异常追踪参数
    直接使用日志方法的exc_info参数,无需手动调用traceback.format_exc(),日志框架会自动捕获并输出当前异常的完整堆栈:

    @app.exception_handler(Exception)
    async def server_error(request: Request, error: Exception):
        logger.error(f"Internal server error: {error}", exc_info=True)
        return JSONResponse(
            status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
            content=jsonable_encoder({
                "message": "...",
                "exception": [str(error)],
                "endpoint": request.url
            })
        )
    

    如果需要输出更多堆栈上下文,还可以添加stack_info=True参数。

  • 直接读取异常的__traceback__属性
    每个Exception实例都自带__traceback__属性,指向其对应的堆栈追踪对象,可通过traceback.format_tb()提取并格式化:

    import traceback
    
    @app.exception_handler(Exception)
    async def server_error(request: Request, error: Exception):
        tb_str = ''.join(traceback.format_tb(error.__traceback__))
        logger.error(f"Internal server error: {error}\n{tb_str}")
        return JSONResponse(
            status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
            content=jsonable_encoder({
                "message": "...",
                "exception": [str(error)],
                "endpoint": request.url
            })
        )
    
  • 检查日志格式配置
    确保你的日志格式化器配置中包含了异常堆栈的输出字段,比如在logging模块的配置里,将格式字符串设置为包含%(exc_info)s:

    import logging
    
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s - %(exc_info)s')
    

    只有配置了对应字段,日志才能正确显示堆栈信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:37:17