فهرست منبع

HADOOP-13098. Dynamic LogLevel setting page should accept case-insensitive log level string. (Junping Du via xyao)

(cherry picked from commit 4e5e87ddd4a47dbea2b23387782e7cd47dec560e)
Xiaoyu Yao 9 سال پیش
والد
کامیت
d18a991817

+ 11 - 5
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/log/LogLevel.java

@@ -142,27 +142,33 @@ public class LogLevel {
     private static void process(org.apache.log4j.Logger log, String level,
         PrintWriter out) throws IOException {
       if (level != null) {
-        if (!level.equals(org.apache.log4j.Level.toLevel(level).toString())) {
-          out.println(MARKER + "Bad level : <b>" + level + "</b><br />");
+        if (!level.equalsIgnoreCase(org.apache.log4j.Level.toLevel(level)
+            .toString())) {
+          out.println(MARKER + "Bad Level : <b>" + level + "</b><br />");
         } else {
           log.setLevel(org.apache.log4j.Level.toLevel(level));
           out.println(MARKER + "Setting Level to " + level + " ...<br />");
         }
       }
       out.println(MARKER
-          + "Effective level: <b>" + log.getEffectiveLevel() + "</b><br />");
+          + "Effective Level: <b>" + log.getEffectiveLevel() + "</b><br />");
     }
 
     private static void process(java.util.logging.Logger log, String level,
         PrintWriter out) throws IOException {
       if (level != null) {
-        log.setLevel(java.util.logging.Level.parse(level));
+        String levelToUpperCase = level.toUpperCase();
+        try {
+          log.setLevel(java.util.logging.Level.parse(levelToUpperCase));
+        } catch (IllegalArgumentException e) {
+          out.println(MARKER + "Bad Level : <b>" + level + "</b><br />");
+        }
         out.println(MARKER + "Setting Level to " + level + " ...<br />");
       }
 
       java.util.logging.Level lev;
       for(; (lev = log.getLevel()) == null; log = log.getParent());
-      out.println(MARKER + "Effective level: <b>" + lev + "</b><br />");
+      out.println(MARKER + "Effective Level: <b>" + lev + "</b><br />");
     }
   }
 }

+ 35 - 4
hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/log/TestLogLevel.java

@@ -28,6 +28,7 @@ import junit.framework.TestCase;
 import org.apache.commons.logging.*;
 import org.apache.commons.logging.impl.*;
 import org.apache.log4j.*;
+import org.junit.Assert;
 
 public class TestLogLevel extends TestCase {
   static final PrintStream out = System.out;
@@ -42,12 +43,13 @@ public class TestLogLevel extends TestCase {
       log.debug("log.debug1");
       log.info("log.info1");
       log.error("log.error1");
-      assertTrue(!Level.ERROR.equals(log.getEffectiveLevel()));
+      Assert.assertNotEquals("Get default Log Level which shouldn't be ERROR.",
+          Level.ERROR, log.getEffectiveLevel());
 
       HttpServer2 server = new HttpServer2.Builder().setName("..")
           .addEndpoint(new URI("http://localhost:0")).setFindPort(true)
           .build();
-      
+
       server.start();
       String authority = NetUtils.getHostPortString(server
           .getConnectorAddress(0));
@@ -67,7 +69,8 @@ public class TestLogLevel extends TestCase {
       log.debug("log.debug2");
       log.info("log.info2");
       log.error("log.error2");
-      assertTrue(Level.ERROR.equals(log.getEffectiveLevel()));
+      assertEquals("Try setting log level: ERROR from servlet.", Level.ERROR,
+          log.getEffectiveLevel());
 
       //command line
       String[] args = {"-setlevel", authority, logName, Level.DEBUG.toString()};
@@ -75,7 +78,35 @@ public class TestLogLevel extends TestCase {
       log.debug("log.debug3");
       log.info("log.info3");
       log.error("log.error3");
-      assertTrue(Level.DEBUG.equals(log.getEffectiveLevel()));
+      assertEquals("Try setting log level: DEBUG via command line", Level.DEBUG,
+          log.getEffectiveLevel());
+
+      // Test mixed upper case and lower case in level string.
+      String[] args2 = {"-setlevel", authority, logName, "Info"};
+      LogLevel.main(args2);
+      log.debug("log.debug4");
+      log.info("log.info4");
+      log.error("log.error4");
+      assertEquals("Try setting log level: Info via command line.", Level.INFO,
+          log.getEffectiveLevel());
+
+      // Test "Error" instead of "ERROR" should work for servlet
+      URL newUrl = new URL("http://" + authority + "/logLevel?log=" + logName
+          + "&level=" + "Error");
+      out.println("*** Connecting to " + newUrl);
+      connection = newUrl.openConnection();
+      connection.connect();
+
+      BufferedReader in2 = new BufferedReader(new InputStreamReader(
+          connection.getInputStream()));
+      for(String line; (line = in2.readLine()) != null; out.println(line));
+      in2.close();
+
+      log.debug("log.debug5");
+      log.info("log.info5");
+      log.error("log.error5");
+      assertEquals("Try setting log level: Error via servlet.", Level.ERROR,
+          log.getEffectiveLevel());
     }
     else {
       out.println(testlog.getClass() + " not tested.");