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

Databricks Wheel任务中Python日志无法显示的问题求助

Databricks Wheel任务日志不显示问题排查与解决

问题场景

将Python包打包为Wheel并在Databricks Job中运行时,仅print语句的输出能显示在任务Output区域,logging.info和自定义logger的日志均无法正常输出。测试代码如下:

# __init__.py
import logging
from log_utils import setup_logging

def entrypoint():
    logger = setup_logging(level=logging.DEBUG)

    logging.info("logging.info - foo")
    logger.info("logger.info - bar")
    print("print - baz")

期望输出:

logging.info - foo
logger.info - bar
print - baz

实际输出:

print - baz

问题原因

  1. Databricks Job环境中Python root logger的默认配置被修改,导致日志无法输出到标准输出;
  2. 自定义日志工具未处理重复添加Handler的情况,可能引发日志输出异常;
  3. 直接调用logging.info使用的是root logger,若其级别未正确同步设置,日志会被过滤。

解决方案

调整日志工具配置

修改log_utils.py,确保root logger级别正确设置,同时避免重复添加Handler:

# log_utils.py
import sys
import logging
from typing import Optional

def setup_logging(
    name: Optional[str] = None, level: Optional[int] = None
) -> logging.Logger:

    if level is None:
        level = logging.INFO

    logger = logging.getLogger(name)
    logger.setLevel(level)

    # 避免重复添加Handler,防止日志重复输出或异常
    if not logger.handlers:
        # 降低py4j日志级别,减少冗余输出
        logging.getLogger("py4j.clientserver").setLevel(logging.WARNING)

        handler = logging.StreamHandler(sys.stdout)
        handler.setLevel(level)

        fmt = "%(levelname)s - %(asctime)s - %(message)s"
        datefmt = "%Y-%m-%d %H:%M:%S"
        formatter = logging.Formatter(fmt=fmt, datefmt=datefmt)
        handler.setFormatter(formatter)
        logger.addHandler(handler)
    
    # 同步设置root logger级别(当使用root logger时)
    if name is None:
        logging.root.setLevel(level)
        
    return logger

统一日志输出方式

在入口文件中统一使用自定义logger输出日志,避免直接调用logging.info(后者依赖root logger配置):

# __init__.py
import logging
from log_utils import setup_logging

def entrypoint():
    logger = setup_logging(level=logging.DEBUG)
    
    # 使用自定义logger输出所有日志
    logger.info("logging.info - foo")
    logger.info("logger.info - bar")
    print("print - baz")

效果验证

修改完成后重新打包Wheel并运行Databricks Job,所有日志内容将正常显示在任务Output区域,符合预期输出。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:20:18