部署在Vercel的Python应用logging日志不显示,仅print输出正常
解决Vercel上Python logging日志不显示的问题
针对你遇到的Vercel部署Python应用后logging模块日志无法显示,但print正常的问题,可以从以下几个方面排查调整:
把
logging.basicConfig移到模块顶层logging.basicConfig仅在第一次调用时生效,后续调用会被忽略。你当前把它放在/ping的请求处理函数里,只有第一次请求能触发初始化,后续请求的日志无法被正确配置。建议将其放在模块最开始(import语句之后):import logging import sys # 全局初始化,放在模块顶层 logging.basicConfig( level=logging.INFO, stream=sys.stdout # 明确指定输出到标准输出,确保Vercel能捕获 ) ... @app.get("/ping") async def ping(): logger = logging.getLogger(__name__) logger.info("from logger") print("from print") return {"message": "OK"}强制日志输出到标准输出/标准错误
Vercel运行时日志是捕获应用的stdout和stderr流,部分环境下logging.basicConfig默认输出可能不是这两个流。显式指定stream=sys.stdout或stream=sys.stderr,能确保日志被Vercel捕获。检查Vercel平台的日志过滤设置
登录Vercel控制台查看项目日志设置,确认没有过滤掉INFO及以下级别的日志。Vercel默认显示所有级别,但自定义过滤规则可能导致INFO日志被隐藏。直接配置日志Handler(替代basicConfig)
如果basicConfig方式仍不生效,可以手动创建StreamHandler并绑定到logger,确保输出流正确:import logging import sys logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) # 创建输出到stdout的handler handler = logging.StreamHandler(sys.stdout) handler.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) ... @app.get("/ping") async def ping(): logger.info("from logger") print("from print") return {"message": "OK"}
内容的提问来源于stack exchange,提问作者M3RS
相关产品推荐
相关产品推荐

