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

在Databricks中使用logging模块出现多余py4j.java_gateway日志如何解决

Databricks Python logging冗余日志过滤方案

问题原因

你在调用logging.basicConfig时将全局根日志的级别设置为了INFO,Databricks底层用于Python和Java交互的py4j模块的日志默认继承根日志级别,因此会输出大量INFO级别的运行日志,占满你的输出窗口。

解决方案

方案1:直接调高py4j模块的日志级别

最简单的处理方式是在初始化日志配置时,单独将py4j相关的日志级别调整为WARN或更高,只保留你自己输出的INFO级日志:

import logging

def initialize_logging(log_level) -> logging:
    logging.basicConfig(
        format='%(asctime)s,%(msecs)03d %(levelname)-8s %(name)s %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S',
        level=log_level
    )
    # 新增以下行,将py4j的日志级别调高到WARN,过滤INFO级别的冗余输出
    logging.getLogger("py4j.java_gateway").setLevel(logging.WARN)

initialize_logging(logging.INFO)
logging.info("some message")

方案2:自定义专属Logger(更推荐)

如果不想修改全局日志配置影响其他模块,可以创建独立的专属Logger,单独配置格式和级别,完全隔离第三方模块的日志输出:

import logging

def initialize_logging(log_level):
    # 创建专属logger,避免使用根logger
    logger = logging.getLogger("my_custom_logger")
    # 关闭继承根logger的配置,避免被全局配置影响
    logger.propagate = False
    logger.setLevel(log_level)
    # 自定义日志格式
    formatter = logging.Formatter(
        fmt='%(asctime)s,%(msecs)03d %(levelname)-8s %(name)s %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )
    # 添加控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setFormatter(formatter)
    logger.addHandler(console_handler)
    return logger

# 初始化自己的logger
logger = initialize_logging(logging.INFO)
logger.info("some message")

用这个方案你输出的所有日志都会归属于my_custom_logger,不会触发其他模块的日志输出,也不会收到第三方模块的冗余日志。

内容的提问来源于stack exchange,提问作者Borislav Blagoev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:03:03