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

如何抑制Apache Spark的INFO日志?已尝试多方案仍无效

解决Spark 3在IntelliJ中INFO日志过多的问题

方法一:添加log4j2.properties配置文件(推荐)

Spark 3默认采用log4j2作为日志框架,代码层面的设置常被默认配置覆盖,直接在资源目录添加配置文件是最可靠的方式:

  1. 在项目的src/main/resources(测试代码则放在src/test/resources)目录下创建log4j2.properties文件
  2. 写入以下配置内容:
# 根日志级别
rootLogger.level = ERROR
rootLogger.appenderRef.console.ref = ConsoleAppender

# 控制台输出格式配置
appender.console.type = Console
appender.console.name = ConsoleAppender
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# 屏蔽冗余日志包
logger.org.name = org
logger.org.level = OFF
logger.akka.name = akka
logger.akka.level = OFF
logger.org.apache.spark.name = org.apache.spark
logger.org.apache.spark.level = ERROR
logger.org.apache.hadoop.name = org.apache.hadoop
logger.org.apache.hadoop.level = ERROR

方法二:检查IntelliJ运行配置的VM参数

IntelliJ的运行配置可能存在覆盖日志设置的VM参数:

  • 打开「Run/Debug Configurations」
  • 找到你的Scala应用配置,查看VM options中是否有-Dlog4j.configuration=...或-Dlog4j2.configurationFile=...这类参数,若有则修改为指向你自己的配置文件,或直接删除该参数让资源目录的配置生效

方法三:确保代码中日志设置的时机正确

若坚持用代码配置,必须在创建SparkSession之前执行日志级别设置,否则Spark初始化时已加载默认配置,后续设置无效:

import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.SparkSession

object SparkApp {
  def main(args: Array[String]): Unit = {
    // 先配置日志级别
    Logger.getLogger("org").setLevel(Level.OFF)
    Logger.getLogger("akka").setLevel(Level.OFF)
    Logger.getRootLogger.setLevel(Level.ERROR)
    
    // 再初始化SparkSession
    val spark = SparkSession.builder()
      .appName("SimpleSparkApp")
      .master("local[*]")
      .getOrCreate()
    
    // 业务代码逻辑...
    
    spark.stop()
  }
}

方法四:排查依赖冲突

项目若引入其他日志框架(如slf4j的非log4j2绑定),会导致配置失效。检查build.sbt中的依赖,确保仅保留log4j2相关绑定:

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-sql" % "3.x.x" % Provided,
  // 排除Spark自带的冲突日志依赖
  "org.apache.spark" %% "spark-core" % "3.x.x" % Provided excludeAll(
    ExclusionRule(organization = "org.slf4j"),
    ExclusionRule(organization = "log4j")
  ),
  // 添加兼容的log4j2依赖
  "org.apache.logging.log4j" % "log4j-slf4j-impl" % "2.x.x" % Runtime,
  "org.apache.logging.log4j" % "log4j-api" % "2.x.x" % Runtime,
  "org.apache.logging.log4j" % "log4j-core" % "2.x.x" % Runtime
)

注:将3.x.x替换为你使用的Spark版本,2.x.x替换为对应兼容的log4j2版本(Spark 3.1+推荐使用log4j2 2.14+)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:40:29