如何抑制Apache Spark的INFO日志?已尝试多方案仍无效
解决Spark 3在IntelliJ中INFO日志过多的问题
方法一:添加log4j2.properties配置文件(推荐)
Spark 3默认采用log4j2作为日志框架,代码层面的设置常被默认配置覆盖,直接在资源目录添加配置文件是最可靠的方式:
- 在项目的
src/main/resources(测试代码则放在src/test/resources)目录下创建log4j2.properties文件 - 写入以下配置内容:
# 根日志级别 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
相关产品推荐
相关产品推荐

