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
相关产品推荐
相关产品推荐

