瀏覽代碼

HADOOP-10288. Explicit reference to Log4JLogger breaks non-log4j users. Contributed by Todd Lipcon.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1561880 13f79535-47bb-0310-9956-ffa450edef68
Todd Lipcon 11 年之前
父節點
當前提交
497eb4b402

+ 3 - 0
hadoop-common-project/hadoop-common/CHANGES.txt

@@ -246,6 +246,9 @@ Release 2.4.0 - UNRELEASED
     HADOOP-10250. VersionUtil returns wrong value when comparing two versions.
     HADOOP-10250. VersionUtil returns wrong value when comparing two versions.
     (Yongjun Zhang via atm)
     (Yongjun Zhang via atm)
 
 
+    HADOOP-10288. Explicit reference to Log4JLogger breaks non-log4j users
+    (todd)
+
 Release 2.3.0 - UNRELEASED
 Release 2.3.0 - UNRELEASED
 
 
   INCOMPATIBLE CHANGES
   INCOMPATIBLE CHANGES

+ 11 - 1
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpRequestLog.java

@@ -53,7 +53,17 @@ public class HttpRequestLog {
     String appenderName = name + "requestlog";
     String appenderName = name + "requestlog";
     Log logger = LogFactory.getLog(loggerName);
     Log logger = LogFactory.getLog(loggerName);
 
 
-    if (logger instanceof Log4JLogger) {
+    boolean isLog4JLogger;;
+    try {
+      isLog4JLogger = logger instanceof Log4JLogger;
+    } catch (NoClassDefFoundError err) {
+      // In some dependent projects, log4j may not even be on the classpath at
+      // runtime, in which case the above instanceof check will throw
+      // NoClassDefFoundError.
+      LOG.debug("Could not load Log4JLogger class", err);
+      isLog4JLogger = false;
+    }
+    if (isLog4JLogger) {
       Log4JLogger httpLog4JLog = (Log4JLogger)logger;
       Log4JLogger httpLog4JLog = (Log4JLogger)logger;
       Logger httpLogger = httpLog4JLog.getLogger();
       Logger httpLogger = httpLog4JLog.getLogger();
       Appender appender = null;
       Appender appender = null;