TEZ-3918. Setting tez.task.log.level does not work

Signed-off-by: Jonathan Eagles <jeagles@apache.org>
diff --git a/tez-api/src/main/java/org/apache/tez/client/TezClientUtils.java b/tez-api/src/main/java/org/apache/tez/client/TezClientUtils.java
index 389b584..d0fc374 100644
--- a/tez-api/src/main/java/org/apache/tez/client/TezClientUtils.java
+++ b/tez-api/src/main/java/org/apache/tez/client/TezClientUtils.java
@@ -760,13 +760,6 @@
   
   static void maybeAddDefaultLoggingJavaOpts(String logLevel, List<String> vargs) {
     Objects.requireNonNull(vargs);
-    if (!vargs.isEmpty()) {
-      for (String arg : vargs) {
-        if (arg.contains(TezConstants.TEZ_ROOT_LOGGER_NAME)) {
-          return;
-        }
-      }
-    }
     TezClientUtils.addLog4jSystemProperties(logLevel, vargs);
   }
 
@@ -829,8 +822,19 @@
         + TezConstants.TEZ_CONTAINER_LOG4J_PROPERTIES_FILE);
     vargs.add("-D" + YarnConfiguration.YARN_APP_CONTAINER_LOG_DIR + "="
         + ApplicationConstants.LOG_DIR_EXPANSION_VAR);
-    vargs.add("-D" + TezConstants.TEZ_ROOT_LOGGER_NAME + "=" + logLevel
-        + "," + TezConstants.TEZ_CONTAINER_LOGGER_NAME);
+    boolean isRootLoggerPresent = false;
+    String rootLoggerArg = "-D" + TezConstants.TEZ_ROOT_LOGGER_NAME + "=" + logLevel
+        + "," + TezConstants.TEZ_CONTAINER_LOGGER_NAME;
+    for (int i = 0; i < vargs.size(); i++) {
+      String arg = vargs.get(i);
+      if (arg.contains(TezConstants.TEZ_ROOT_LOGGER_NAME)) {
+        vargs.set(i, rootLoggerArg);
+        isRootLoggerPresent = true;
+      }
+    }
+    if (!isRootLoggerPresent) {
+      vargs.add(rootLoggerArg);
+    }
   }
 
   static ConfigurationProto createFinalConfProtoForApp(Configuration amConf,
diff --git a/tez-api/src/test/java/org/apache/tez/client/TestTezClientUtils.java b/tez-api/src/test/java/org/apache/tez/client/TestTezClientUtils.java
index 29e9210..29a6769 100644
--- a/tez-api/src/test/java/org/apache/tez/client/TestTezClientUtils.java
+++ b/tez-api/src/test/java/org/apache/tez/client/TestTezClientUtils.java
@@ -682,6 +682,16 @@
         javaOpts.contains("-Dlog4j.configuratorClass=org.apache.tez.common.TezLog4jConfigurator"));
   }
 
+  @Test
+  public void testDefaultLoggingJavaOptsWithRootLogger() {
+    String origJavaOpts = "-D" + TezConstants.TEZ_ROOT_LOGGER_NAME + "=INFO";
+    String javaOpts = TezClientUtils.maybeAddDefaultLoggingJavaOpts("FOOBAR", origJavaOpts);
+    Assert.assertNotNull(javaOpts);
+    Assert.assertTrue(javaOpts.contains("-D" + TezConstants.TEZ_ROOT_LOGGER_NAME + "=FOOBAR"));
+    Assert.assertTrue(javaOpts.contains(TezConstants.TEZ_CONTAINER_LOG4J_PROPERTIES_FILE)
+        && javaOpts.contains("-Dlog4j.configuratorClass=org.apache.tez.common.TezLog4jConfigurator"));
+  }
+
   @Test (timeout = 5000)
   public void testConfSerializationForAm() {
     Configuration conf =new Configuration(false);