You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by li...@apache.org on 2019/03/22 02:18:52 UTC
[spark] branch master updated: [SPARK-27236][TEST] Refactor
log-appender pattern in tests
This is an automated email from the ASF dual-hosted git repository.
lixiao 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 9f58d3b [SPARK-27236][TEST] Refactor log-appender pattern in tests
9f58d3b is described below
commit 9f58d3b4369fe6129a8471b74dc2f933f3d417eb
Author: maryannxue <ma...@apache.org>
AuthorDate: Thu Mar 21 19:18:30 2019 -0700
[SPARK-27236][TEST] Refactor log-appender pattern in tests
## What changes were proposed in this pull request?
Refactored code in tests regarding the "withLogAppender()" pattern by creating a general helper method in SparkFunSuite.
## How was this patch tested?
Passed existing tests.
Closes #24172 from maryannxue/log-appender.
Authored-by: maryannxue <ma...@apache.org>
Signed-off-by: gatorsmile <ga...@gmail.com>
---
.../scala/org/apache/spark/SparkFunSuite.scala | 25 ++++++++++++++++++++++
.../catalyst/expressions/CodeGenerationSuite.scala | 11 +---------
.../catalyst/optimizer/OptimizerLoggingSuite.scala | 14 ++----------
.../sql/execution/datasources/csv/CSVSuite.scala | 10 ++-------
4 files changed, 30 insertions(+), 30 deletions(-)
diff --git a/core/src/test/scala/org/apache/spark/SparkFunSuite.scala b/core/src/test/scala/org/apache/spark/SparkFunSuite.scala
index 7d114b1..34e3868 100644
--- a/core/src/test/scala/org/apache/spark/SparkFunSuite.scala
+++ b/core/src/test/scala/org/apache/spark/SparkFunSuite.scala
@@ -20,6 +20,7 @@ package org.apache.spark
// scalastyle:off
import java.io.File
+import org.apache.log4j.{Appender, Level, Logger}
import org.scalatest.{BeforeAndAfterAll, FunSuite, Outcome}
import org.apache.spark.internal.Logging
@@ -117,4 +118,28 @@ abstract class SparkFunSuite
Utils.deleteRecursively(dir)
}
}
+
+ /**
+ * Adds a log appender and optionally sets a log level to the root logger or the logger with
+ * the specified name, then executes the specified function, and in the end removes the log
+ * appender and restores the log level if necessary.
+ */
+ protected def withLogAppender(
+ appender: Appender,
+ loggerName: Option[String] = None,
+ level: Option[Level] = None)(
+ f: => Unit): Unit = {
+ val logger = loggerName.map(Logger.getLogger).getOrElse(Logger.getRootLogger)
+ val restoreLevel = logger.getLevel
+ logger.addAppender(appender)
+ if (level.isDefined) {
+ logger.setLevel(level.get)
+ }
+ try f finally {
+ logger.removeAppender(appender)
+ if (level.isDefined) {
+ logger.setLevel(restoreLevel)
+ }
+ }
+ }
}
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CodeGenerationSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CodeGenerationSuite.scala
index 7d49866..7d656fc 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CodeGenerationSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/CodeGenerationSuite.scala
@@ -529,7 +529,7 @@ class CodeGenerationSuite extends SparkFunSuite with ExpressionEvalHelper {
}
val appender = new MockAppender()
- withLogAppender(appender) {
+ withLogAppender(appender, loggerName = Some(classOf[CodeGenerator[_, _]].getName)) {
val x = 42
val expr = HugeCodeIntExpression(x)
val proj = GenerateUnsafeProjection.generate(Seq(expr))
@@ -538,15 +538,6 @@ class CodeGenerationSuite extends SparkFunSuite with ExpressionEvalHelper {
}
assert(appender.seenMessage)
}
-
- private def withLogAppender(appender: Appender)(f: => Unit): Unit = {
- val logger =
- Logger.getLogger(classOf[CodeGenerator[_, _]].getName)
- logger.addAppender(appender)
- try f finally {
- logger.removeAppender(appender)
- }
- }
}
case class HugeCodeIntExpression(value: Int) extends Expression {
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/OptimizerLoggingSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/OptimizerLoggingSuite.scala
index 915f4080..3e9b453 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/OptimizerLoggingSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/OptimizerLoggingSuite.scala
@@ -51,20 +51,10 @@ class OptimizerLoggingSuite extends PlanTest {
override def requiresLayout(): Boolean = false
}
- private def withLogLevelAndAppender(level: Level, appender: Appender)(f: => Unit): Unit = {
- val logger = Logger.getLogger(Optimize.getClass.getName.dropRight(1))
- val restoreLevel = logger.getLevel
- logger.setLevel(level)
- logger.addAppender(appender)
- try f finally {
- logger.setLevel(restoreLevel)
- logger.removeAppender(appender)
- }
- }
-
private def verifyLog(expectedLevel: Level, expectedRules: Seq[String]): Unit = {
val logAppender = new MockAppender()
- withLogLevelAndAppender(Level.TRACE, logAppender) {
+ withLogAppender(logAppender,
+ loggerName = Some(Optimize.getClass.getName.dropRight(1)), level = Some(Level.TRACE)) {
val input = LocalRelation('a.int, 'b.string, 'c.double)
val query = input.select('a, 'b).select('a).where('a > 1).analyze
val expected = input.where('a > 1).select('a).analyze
diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/csv/CSVSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/csv/CSVSuite.scala
index d9e5d7a..302db03 100644
--- a/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/csv/CSVSuite.scala
+++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/datasources/csv/CSVSuite.scala
@@ -1697,21 +1697,17 @@ class CSVSuite extends QueryTest with SharedSQLContext with SQLTestUtils with Te
}
val testAppender1 = new TestAppender
- LogManager.getRootLogger.addAppender(testAppender1)
- try {
+ withLogAppender(testAppender1) {
val ds = Seq("columnA,columnB", "1.0,1000.0").toDS()
val ischema = new StructType().add("columnB", DoubleType).add("columnA", DoubleType)
spark.read.schema(ischema).option("header", true).option("enforceSchema", true).csv(ds)
- } finally {
- LogManager.getRootLogger.removeAppender(testAppender1)
}
assert(testAppender1.events.asScala
.exists(msg => msg.getRenderedMessage.contains("CSV header does not conform to the schema")))
val testAppender2 = new TestAppender
- LogManager.getRootLogger.addAppender(testAppender2)
- try {
+ withLogAppender(testAppender2) {
withTempPath { path =>
val oschema = new StructType().add("f1", DoubleType).add("f2", DoubleType)
val odf = spark.createDataFrame(List(Row(1.0, 1234.5)).asJava, oschema)
@@ -1724,8 +1720,6 @@ class CSVSuite extends QueryTest with SharedSQLContext with SQLTestUtils with Te
.csv(path.getCanonicalPath)
.collect()
}
- } finally {
- LogManager.getRootLogger.removeAppender(testAppender2)
}
assert(testAppender2.events.asScala
.exists(msg => msg.getRenderedMessage.contains("CSV header does not conform to the schema")))
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org