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

PySpark日志器无法记录INFO语句?如何配置使其正常输出?

解决PySpark中自定义日志器INFO级别不输出的问题

问题现象

配置名为Example Processor的日志器级别为INFO时,仅能看到WARN、ERROR和FATAL级别的日志;但设置为DEBUG级别时,能正常输出DEBUG、INFO、WARN、ERROR和FATAL所有级别日志。

原代码示例

self.spark = SparkSession.builder \
    .master("local[1]") \
    .appName("DemoProcessor") \
    .getOrCreate()

log4jLogger = self.spark.sparkContext._jvm.org.apache.log4j
self.log = log4jLogger.LogManager.getLogger('Example Processor')

self.log.setLevel(log4jLogger.Level.INFO)
# self.log.setLevel(log4jLogger.Level.DEBUG)
self.log.trace("Trace Message!")
self.log.debug("Debug Message!")
self.log.info("Info Message!")
self.log.warn("Warn Message!")
self.log.error("Error Message!")
self.log.fatal("Fatal Message!")

原因分析

Spark默认的根日志级别为WARN,即使自定义日志器单独设置了INFO级别,根日志器的过滤规则会拦截INFO及以下级别的日志。而当自定义日志器设置为DEBUG时,日志框架会优先遵循子日志器的细粒度级别规则,从而绕过根日志的WARN级别限制。

解决方法

需要同时调整自定义日志器级别和Spark全局根日志级别,修改后的代码如下:

self.spark = SparkSession.builder \
    .master("local[1]") \
    .appName("DemoProcessor") \
    .getOrCreate()

log4jLogger = self.spark.sparkContext._jvm.org.apache.log4j
# 获取自定义日志器并设置级别为INFO
self.log = log4jLogger.LogManager.getLogger('Example Processor')
self.log.setLevel(log4jLogger.Level.INFO)

# 方法1:直接修改根日志器级别为INFO
root_logger = log4jLogger.LogManager.getRootLogger()
root_logger.setLevel(log4jLogger.Level.INFO)

# 方法2:使用SparkContext的API修改全局日志级别,效果与方法1一致
# self.spark.sparkContext.setLogLevel("INFO")

self.log.trace("Trace Message!")
self.log.debug("Debug Message!")
self.log.info("Info Message!")
self.log.warn("Warn Message!")
self.log.error("Error Message!")
self.log.fatal("Fatal Message!")

修改后效果

执行代码后,Example Processor的INFO级别日志会正常输出,同时保留WARN、ERROR、FATAL级别的日志内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:25:39