This is an automated email from the ASF dual-hosted git repository.
dongjoon pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/master by this push:
new e61d1e7 [SPARK-37794][BUILD] Remove internal log4j bridge api usage
e61d1e7 is described below
commit e61d1e7894dced952ac63992752dcde8aa086b93
Author: Liang-Chi Hsieh <[email protected]>
AuthorDate: Fri Dec 31 16:01:21 2021 -0800
[SPARK-37794][BUILD] Remove internal log4j bridge api usage
### What changes were proposed in this pull request?
This patch removes log4j 1.x bridge api usage.
### Why are the changes needed?
Although for compatibility reason, we include log4j 1.x bridge api
dependency. But for Spark itself, it is better to remove the bridge api usage.
### Does this PR introduce _any_ user-facing change?
No
### How was this patch tested?
Pass all tests
Closes #35075 from viirya/minor.
Authored-by: Liang-Chi Hsieh <[email protected]>
Signed-off-by: Dongjoon Hyun <[email protected]>
---
.../scala/org/apache/spark/internal/Logging.scala | 33 +++++----
.../examples/streaming/StreamingExamples.scala | 6 +-
.../examples/streaming/KinesisWordCountASL.scala | 6 +-
.../spark/deploy/yarn/SparkRackResolver.scala | 8 ++-
.../v2/jdbc/JDBCTableCatalogSuite.scala | 2 +-
.../sql/hive/thriftserver/SparkSQLCLIDriver.scala | 3 +-
.../HiveMetastoreLazyInitializationSuite.scala | 5 +-
.../test/resources/data/conf/hive-log4j.properties | 78 ----------------------
.../org/apache/spark/sql/hive/test/TestHive.scala | 9 +--
9 files changed, 39 insertions(+), 111 deletions(-)
diff --git a/core/src/main/scala/org/apache/spark/internal/Logging.scala
b/core/src/main/scala/org/apache/spark/internal/Logging.scala
index 08e8f8b..5191be4 100644
--- a/core/src/main/scala/org/apache/spark/internal/Logging.scala
+++ b/core/src/main/scala/org/apache/spark/internal/Logging.scala
@@ -20,7 +20,7 @@ package org.apache.spark.internal
import scala.collection.JavaConverters._
import org.apache.logging.log4j.{Level, LogManager}
-import org.apache.logging.log4j.core.{Filter, LifeCycle, LogEvent,
LoggerContext}
+import org.apache.logging.log4j.core.{Filter, LifeCycle, LogEvent, Logger =>
Log4jLogger, LoggerContext}
import org.apache.logging.log4j.core.appender.ConsoleAppender
import org.apache.logging.log4j.core.config.DefaultConfiguration
import org.apache.logging.log4j.core.filter.AbstractFilter
@@ -127,17 +127,11 @@ trait Logging {
private def initializeLogging(isInterpreter: Boolean, silent: Boolean): Unit
= {
if (Logging.isLog4j2()) {
- val rootLogger =
LogManager.getRootLogger.asInstanceOf[org.apache.logging.log4j.core.Logger]
+ val rootLogger = LogManager.getRootLogger.asInstanceOf[Log4jLogger]
// If Log4j 2 is used but is initialized by default configuration,
// load a default properties file
- // (see org.apache.logging.log4j.core.config.DefaultConfiguration)
- val needToInitializeLog4j2 = rootLogger.getAppenders.isEmpty ||
- (rootLogger.getAppenders.size() == 1 &&
- rootLogger.getLevel == Level.ERROR &&
- LogManager.getContext.asInstanceOf[LoggerContext]
- .getConfiguration.isInstanceOf[DefaultConfiguration])
// scalastyle:off println
- if (needToInitializeLog4j2) {
+ if (Logging.islog4j2DefaultConfigured()) {
Logging.defaultSparkLog4jConfig = true
val defaultLogProps = "org/apache/spark/log4j2-defaults.properties"
Option(Utils.getSparkClassLoader.getResource(defaultLogProps)) match {
@@ -159,8 +153,7 @@ trait Logging {
if (isInterpreter) {
// Use the repl's main class to define the default log level when
running the shell,
// overriding the root logger's config if they're different.
- val replLogger = LogManager.getLogger(logName)
- .asInstanceOf[org.apache.logging.log4j.core.Logger]
+ val replLogger =
LogManager.getLogger(logName).asInstanceOf[Log4jLogger]
val replLevel = Option(replLogger.getLevel()).getOrElse(Level.WARN)
// Update the consoleAppender threshold to replLevel
if (replLevel != rootLogger.getLevel()) {
@@ -220,8 +213,7 @@ private[spark] object Logging {
val context = LogManager.getContext(false).asInstanceOf[LoggerContext]
context.reconfigure()
} else {
- val rootLogger = LogManager.getRootLogger()
- .asInstanceOf[org.apache.logging.log4j.core.Logger]
+ val rootLogger = LogManager.getRootLogger().asInstanceOf[Log4jLogger]
rootLogger.setLevel(defaultRootLevel)
sparkShellThresholdLevel = null
}
@@ -237,6 +229,19 @@ private[spark] object Logging {
"org.apache.logging.slf4j.Log4jLoggerFactory".equals(binderClass)
}
+ /**
+ * Return true if log4j2 is initialized by default configuration which has
one
+ * appender with error level. See
`org.apache.logging.log4j.core.config.DefaultConfiguration`.
+ */
+ private[spark] def islog4j2DefaultConfigured(): Boolean = {
+ val rootLogger = LogManager.getRootLogger.asInstanceOf[Log4jLogger]
+ rootLogger.getAppenders.isEmpty ||
+ (rootLogger.getAppenders.size() == 1 &&
+ rootLogger.getLevel == Level.ERROR &&
+ LogManager.getContext.asInstanceOf[LoggerContext]
+ .getConfiguration.isInstanceOf[DefaultConfiguration])
+ }
+
private[spark] class SparkShellLoggingFilter extends AbstractFilter {
private var status = LifeCycle.State.INITIALIZING
@@ -255,7 +260,7 @@ private[spark] object Logging {
Filter.Result.NEUTRAL
} else {
var logger = LogManager.getLogger(logEvent.getLoggerName)
- .asInstanceOf[org.apache.logging.log4j.core.Logger]
+ .asInstanceOf[Log4jLogger]
while (logger.getParent() != null) {
if (logger.getLevel != null || !logger.getAppenders.isEmpty) {
return Filter.Result.NEUTRAL
diff --git
a/examples/src/main/scala/org/apache/spark/examples/streaming/StreamingExamples.scala
b/examples/src/main/scala/org/apache/spark/examples/streaming/StreamingExamples.scala
index fe336b5..20c5eb1 100644
---
a/examples/src/main/scala/org/apache/spark/examples/streaming/StreamingExamples.scala
+++
b/examples/src/main/scala/org/apache/spark/examples/streaming/StreamingExamples.scala
@@ -17,8 +17,7 @@
package org.apache.spark.examples.streaming
-import org.apache.logging.log4j.{Level, LogManager}
-import org.apache.logging.log4j.core.Logger
+import org.apache.logging.log4j.Level
import org.apache.logging.log4j.core.config.Configurator
import org.apache.spark.internal.Logging
@@ -28,8 +27,7 @@ object StreamingExamples extends Logging {
/** Set reasonable logging levels for streaming if the user has not
configured log4j. */
def setStreamingLogLevels(): Unit = {
- val log4jInitialized =
!LogManager.getRootLogger.asInstanceOf[Logger].getAppenders.isEmpty
- if (!log4jInitialized) {
+ if (Logging.islog4j2DefaultConfigured()) {
// We first log something to initialize Spark's default logging, then we
override the
// logging level.
logInfo("Setting log level to [WARN] for streaming example." +
diff --git
a/external/kinesis-asl/src/main/scala/org/apache/spark/examples/streaming/KinesisWordCountASL.scala
b/external/kinesis-asl/src/main/scala/org/apache/spark/examples/streaming/KinesisWordCountASL.scala
index ea47665..e96a669 100644
---
a/external/kinesis-asl/src/main/scala/org/apache/spark/examples/streaming/KinesisWordCountASL.scala
+++
b/external/kinesis-asl/src/main/scala/org/apache/spark/examples/streaming/KinesisWordCountASL.scala
@@ -25,8 +25,7 @@ import scala.util.Random
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain
import com.amazonaws.services.kinesis.AmazonKinesisClient
import com.amazonaws.services.kinesis.model.PutRecordRequest
-import org.apache.logging.log4j.{Level, LogManager}
-import org.apache.logging.log4j.core.Logger
+import org.apache.logging.log4j.Level
import org.apache.logging.log4j.core.config.Configurator
import org.apache.spark.SparkConf
@@ -272,8 +271,7 @@ object KinesisWordProducerASL {
private[streaming] object StreamingExamples extends Logging {
// Set reasonable logging levels for streaming if the user has not
configured log4j.
def setStreamingLogLevels(): Unit = {
- val log4jInitialized =
!LogManager.getRootLogger.asInstanceOf[Logger].getAppenders.isEmpty
- if (!log4jInitialized) {
+ if (Logging.islog4j2DefaultConfigured()) {
// We first log something to initialize Spark's default logging, then we
override the
// logging level.
logInfo("Setting log level to [WARN] for streaming example." +
diff --git
a/resource-managers/yarn/src/main/scala/org/apache/spark/deploy/yarn/SparkRackResolver.scala
b/resource-managers/yarn/src/main/scala/org/apache/spark/deploy/yarn/SparkRackResolver.scala
index 51be932..f3e8a9f 100644
---
a/resource-managers/yarn/src/main/scala/org/apache/spark/deploy/yarn/SparkRackResolver.scala
+++
b/resource-managers/yarn/src/main/scala/org/apache/spark/deploy/yarn/SparkRackResolver.scala
@@ -26,7 +26,8 @@ import org.apache.hadoop.fs.CommonConfigurationKeysPublic
import org.apache.hadoop.net._
import org.apache.hadoop.util.ReflectionUtils
import org.apache.hadoop.yarn.util.RackResolver
-import org.apache.log4j.{Level, Logger}
+import org.apache.logging.log4j.{Level, LogManager}
+import org.apache.logging.log4j.core.Logger
import org.apache.spark.internal.Logging
@@ -38,8 +39,9 @@ import org.apache.spark.internal.Logging
private[spark] class SparkRackResolver(conf: Configuration) extends Logging {
// RackResolver logs an INFO message whenever it resolves a rack, which is
way too often.
- if (Logger.getLogger(classOf[RackResolver]).getLevel == null) {
- Logger.getLogger(classOf[RackResolver]).setLevel(Level.WARN)
+ val logger = LogManager.getLogger(classOf[RackResolver])
+ if (logger.getLevel != Level.WARN) {
+ logger.asInstanceOf[Logger].setLevel(Level.WARN)
}
private val dnsToSwitchMapping: DNSToSwitchMapping = {
diff --git
a/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/v2/jdbc/JDBCTableCatalogSuite.scala
b/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/v2/jdbc/JDBCTableCatalogSuite.scala
index 43b8686..8d8d132 100644
---
a/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/v2/jdbc/JDBCTableCatalogSuite.scala
+++
b/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/v2/jdbc/JDBCTableCatalogSuite.scala
@@ -19,7 +19,7 @@ package org.apache.spark.sql.execution.datasources.v2.jdbc
import java.sql.{Connection, DriverManager}
import java.util.Properties
-import org.apache.log4j.Level
+import org.apache.logging.log4j.Level
import org.apache.spark.SparkConf
import org.apache.spark.sql.{AnalysisException, QueryTest, Row}
diff --git
a/sql/hive-thriftserver/src/main/scala/org/apache/spark/sql/hive/thriftserver/SparkSQLCLIDriver.scala
b/sql/hive-thriftserver/src/main/scala/org/apache/spark/sql/hive/thriftserver/SparkSQLCLIDriver.scala
index d53e09b..e17b748 100644
---
a/sql/hive-thriftserver/src/main/scala/org/apache/spark/sql/hive/thriftserver/SparkSQLCLIDriver.scala
+++
b/sql/hive-thriftserver/src/main/scala/org/apache/spark/sql/hive/thriftserver/SparkSQLCLIDriver.scala
@@ -35,7 +35,6 @@ import org.apache.hadoop.hive.ql.Driver
import org.apache.hadoop.hive.ql.processors._
import org.apache.hadoop.hive.ql.session.SessionState
import org.apache.hadoop.security.{Credentials, UserGroupInformation}
-import org.apache.log4j.Level
import org.apache.thrift.transport.TSocket
import org.slf4j.LoggerFactory
import sun.misc.{Signal, SignalHandler}
@@ -327,7 +326,7 @@ private[hive] class SparkSQLCLIDriver extends CliDriver
with Logging {
if (!isRemoteMode) {
SparkSQLEnv.init()
if (sessionState.getIsSilent) {
- SparkSQLEnv.sparkContext.setLogLevel(Level.WARN.toString)
+ SparkSQLEnv.sparkContext.setLogLevel("warn")
}
} else {
// Hive 1.2 + not supported in CLI
diff --git
a/sql/hive-thriftserver/src/test/scala/org/apache/spark/sql/hive/HiveMetastoreLazyInitializationSuite.scala
b/sql/hive-thriftserver/src/test/scala/org/apache/spark/sql/hive/HiveMetastoreLazyInitializationSuite.scala
index 951f927..af11b81 100644
---
a/sql/hive-thriftserver/src/test/scala/org/apache/spark/sql/hive/HiveMetastoreLazyInitializationSuite.scala
+++
b/sql/hive-thriftserver/src/test/scala/org/apache/spark/sql/hive/HiveMetastoreLazyInitializationSuite.scala
@@ -17,6 +17,9 @@
package org.apache.spark.sql.hive
+import org.apache.logging.log4j.LogManager
+import org.apache.logging.log4j.core.Logger
+
import org.apache.spark.SparkFunSuite
import org.apache.spark.sql.{AnalysisException, SparkSession}
import org.apache.spark.util.Utils
@@ -30,7 +33,7 @@ class HiveMetastoreLazyInitializationSuite extends
SparkFunSuite {
.enableHiveSupport()
.config("spark.hadoop.hive.metastore.uris", "thrift://127.0.0.1:11111")
.getOrCreate()
- val originalLevel = org.apache.log4j.Logger.getRootLogger().getLevel
+ val originalLevel = LogManager.getRootLogger.asInstanceOf[Logger].getLevel
val originalClassLoader = Thread.currentThread().getContextClassLoader
try {
// Avoid outputting a lot of expected warning logs
diff --git a/sql/hive/src/test/resources/data/conf/hive-log4j.properties
b/sql/hive/src/test/resources/data/conf/hive-log4j.properties
deleted file mode 100644
index 83fd03a..0000000
--- a/sql/hive/src/test/resources/data/conf/hive-log4j.properties
+++ /dev/null
@@ -1,78 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Define some default values that can be overridden by system properties
-hive.root.logger=DEBUG,DRFA
-hive.log.dir=${build.dir.hive}/ql/tmp/
-hive.log.file=hive.log
-
-# Define the root logger to the system property "hadoop.root.logger".
-log4j.rootLogger=${hive.root.logger}, EventCounter
-
-# Logging Threshold
-log4j.threshhold=WARN
-
-#
-# Daily Rolling File Appender
-#
-
-log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.DRFA.File=${hive.log.dir}/${hive.log.file}
-
-# Roll over at midnight
-log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
-
-# 30-day backup
-#log4j.appender.DRFA.MaxBackupIndex=30
-log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout
-
-# Pattern format: Date LogLevel LoggerName LogMessage
-#log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
-# Debugging Pattern format
-log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2}
(%F:%M(%L)) - %m%n
-
-
-#
-# console
-# Add "console" to rootlogger above if you want to use this
-#
-
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p
%c{2}: %m%n
-
-#custom logging levels
-#log4j.logger.xxx=DEBUG
-
-#
-# Event Counter Appender
-# Sends counts of logging messages at different severity levels to Hadoop
Metrics.
-#
-log4j.appender.EventCounter=org.apache.hadoop.hive.shims.HiveEventCounter
-
-
-log4j.category.DataNucleus=ERROR,DRFA
-log4j.category.Datastore=ERROR,DRFA
-log4j.category.Datastore.Schema=ERROR,DRFA
-log4j.category.JPOX.Datastore=ERROR,DRFA
-log4j.category.JPOX.Plugin=ERROR,DRFA
-log4j.category.JPOX.MetaData=ERROR,DRFA
-log4j.category.JPOX.Query=ERROR,DRFA
-log4j.category.JPOX.General=ERROR,DRFA
-log4j.category.JPOX.Enhancer=ERROR,DRFA
-log4j.logger.org.apache.hadoop.conf.Configuration=ERROR,DRFA
-
diff --git
a/sql/hive/src/test/scala/org/apache/spark/sql/hive/test/TestHive.scala
b/sql/hive/src/test/scala/org/apache/spark/sql/hive/test/TestHive.scala
index 3769de0..07361cf 100644
--- a/sql/hive/src/test/scala/org/apache/spark/sql/hive/test/TestHive.scala
+++ b/sql/hive/src/test/scala/org/apache/spark/sql/hive/test/TestHive.scala
@@ -535,10 +535,11 @@ private[hive] class TestHiveSparkSession(
def reset(): Unit = {
try {
// HACK: Hive is too noisy by default.
- org.apache.log4j.LogManager.getCurrentLoggers.asScala.foreach { log =>
- val logger = log.asInstanceOf[org.apache.log4j.Logger]
- if (!logger.getName.contains("org.apache.spark")) {
- logger.setLevel(org.apache.log4j.Level.WARN)
+ org.apache.logging.log4j.LogManager.getContext(false)
+
.asInstanceOf[org.apache.logging.log4j.core.LoggerContext].getConfiguration.getLoggers()
+ .asScala.foreach { case (_, log) =>
+ if (!log.getName.contains("org.apache.spark")) {
+ log.setLevel(org.apache.logging.log4j.Level.WARN)
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]