瀏覽代碼

HADOOP-14706. Adding a helper method to determine whether a log is Log4j implement.

This closes #257

Signed-off-by: Akira Ajisaka <aajisaka@apache.org>
wenxinhe 7 年之前
父節點
當前提交
691bf5ec5d

+ 1 - 1
hadoop-common-project/hadoop-common/pom.xml

@@ -179,7 +179,7 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
-      <scope>runtime</scope>
+      <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>org.mockito</groupId>

+ 15 - 0
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/GenericsUtil.java

@@ -23,6 +23,9 @@ import java.util.List;
 
 import org.apache.hadoop.classification.InterfaceAudience;
 import org.apache.hadoop.classification.InterfaceStability;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.impl.Log4jLoggerAdapter;
 
 /**
  * Contains utility methods for dealing with Java Generics. 
@@ -72,4 +75,16 @@ public class GenericsUtil {
     return toArray(getClass(list.get(0)), list);
   }
 
+  /**
+   * Determine whether the log of <code>clazz</code> is Log4j implementation.
+   * @param clazz a class to be determined
+   * @return true if the log of <code>clazz</code> is Log4j implementation.
+   */
+  public static boolean isLog4jLogger(Class<?> clazz) {
+    if (clazz == null) {
+      return false;
+    }
+    Logger log = LoggerFactory.getLogger(clazz);
+    return log instanceof Log4jLoggerAdapter;
+  }
 }

+ 5 - 0
hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestGenericsUtil.java

@@ -131,4 +131,9 @@ public class TestGenericsUtil extends TestCase {
             GenericClass.class, c2);
   }
 
+  public void testIsLog4jLogger() throws Exception {
+    assertFalse("False if clazz is null", GenericsUtil.isLog4jLogger(null));
+    assertTrue("The implementation is Log4j",
+        GenericsUtil.isLog4jLogger(TestGenericsUtil.class));
+  }
 }