|
@@ -17,16 +17,12 @@
|
|
|
*/
|
|
|
package org.apache.hadoop.http;
|
|
|
|
|
|
+import java.util.Collections;
|
|
|
import java.util.HashMap;
|
|
|
-
|
|
|
-import org.apache.commons.logging.impl.Log4JLogger;
|
|
|
-import org.apache.commons.logging.Log;
|
|
|
-import org.apache.commons.logging.LogConfigurationException;
|
|
|
-import org.apache.commons.logging.LogFactory;
|
|
|
-import org.apache.log4j.Appender;
|
|
|
-import org.eclipse.jetty.server.AsyncRequestLogWriter;
|
|
|
+import java.util.Map;
|
|
|
import org.eclipse.jetty.server.CustomRequestLog;
|
|
|
import org.eclipse.jetty.server.RequestLog;
|
|
|
+import org.eclipse.jetty.server.Slf4jRequestLogWriter;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
@@ -37,67 +33,27 @@ public class HttpRequestLog {
|
|
|
|
|
|
public static final Logger LOG =
|
|
|
LoggerFactory.getLogger(HttpRequestLog.class);
|
|
|
- private static final HashMap<String, String> serverToComponent;
|
|
|
+ private static final Map<String, String> serverToComponent;
|
|
|
|
|
|
static {
|
|
|
- serverToComponent = new HashMap<String, String>();
|
|
|
- serverToComponent.put("cluster", "resourcemanager");
|
|
|
- serverToComponent.put("hdfs", "namenode");
|
|
|
- serverToComponent.put("node", "nodemanager");
|
|
|
+ Map<String, String > map = new HashMap<String, String>();
|
|
|
+ map.put("cluster", "resourcemanager");
|
|
|
+ map.put("hdfs", "namenode");
|
|
|
+ map.put("node", "nodemanager");
|
|
|
+ serverToComponent = Collections.unmodifiableMap(map);
|
|
|
}
|
|
|
|
|
|
public static RequestLog getRequestLog(String name) {
|
|
|
-
|
|
|
String lookup = serverToComponent.get(name);
|
|
|
if (lookup != null) {
|
|
|
name = lookup;
|
|
|
}
|
|
|
String loggerName = "http.requests." + name;
|
|
|
- String appenderName = name + "requestlog";
|
|
|
- Log logger = LogFactory.getLog(loggerName);
|
|
|
-
|
|
|
- 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;
|
|
|
- org.apache.log4j.Logger httpLogger = httpLog4JLog.getLogger();
|
|
|
- Appender appender = null;
|
|
|
-
|
|
|
- try {
|
|
|
- appender = httpLogger.getAppender(appenderName);
|
|
|
- } catch (LogConfigurationException e) {
|
|
|
- LOG.warn("Http request log for {} could not be created", loggerName);
|
|
|
- throw e;
|
|
|
- }
|
|
|
-
|
|
|
- if (appender == null) {
|
|
|
- LOG.info("Http request log for {} is not defined", loggerName);
|
|
|
- return null;
|
|
|
- }
|
|
|
+ Slf4jRequestLogWriter writer = new Slf4jRequestLogWriter();
|
|
|
+ writer.setLoggerName(loggerName);
|
|
|
+ return new CustomRequestLog(writer, CustomRequestLog.EXTENDED_NCSA_FORMAT);
|
|
|
+ }
|
|
|
|
|
|
- if (appender instanceof HttpRequestLogAppender) {
|
|
|
- HttpRequestLogAppender requestLogAppender
|
|
|
- = (HttpRequestLogAppender)appender;
|
|
|
- AsyncRequestLogWriter logWriter = new AsyncRequestLogWriter();
|
|
|
- logWriter.setFilename(requestLogAppender.getFilename());
|
|
|
- logWriter.setRetainDays(requestLogAppender.getRetainDays());
|
|
|
- return new CustomRequestLog(logWriter,
|
|
|
- CustomRequestLog.EXTENDED_NCSA_FORMAT);
|
|
|
- } else {
|
|
|
- LOG.warn("Jetty request log for {} was of the wrong class", loggerName);
|
|
|
- return null;
|
|
|
- }
|
|
|
- } else {
|
|
|
- LOG.warn("Jetty request log can only be enabled using Log4j");
|
|
|
- return null;
|
|
|
- }
|
|
|
+ private HttpRequestLog() {
|
|
|
}
|
|
|
}
|