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

部署在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:45:09