[
https://issues.apache.org/jira/browse/HADOOP-18653?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17697972#comment-17697972
]
ASF GitHub Bot commented on HADOOP-18653:
-----------------------------------------
steveloughran commented on code in PR #5456:
URL: https://github.com/apache/hadoop/pull/5456#discussion_r1129648239
##########
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/log/LogLevel.java:
##########
@@ -338,14 +341,18 @@ public void doGet(HttpServletRequest request,
HttpServletResponse response
out.println(MARKER
+ "Submitted Class Name: <b>" + logName + "</b><br />");
- Logger log = Logger.getLogger(logName);
+ org.slf4j.Logger log = LoggerFactory.getLogger(logName);
out.println(MARKER
+ "Log Class: <b>" + log.getClass().getName() +"</b><br />");
if (level != null) {
out.println(MARKER + "Submitted Level: <b>" + level + "</b><br />");
}
- process(log, level, out);
+ if (GenericsUtil.isLog4jLogger(logName)) {
+ process(Logger.getLogger(logName), level, out);
+ } else {
+ out.println("Sorry, " + log.getClass() + " not supported.<br />");
Review Comment:
text to explain "log4j loggers only"
##########
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/GenericsUtil.java:
##########
@@ -89,10 +89,30 @@ public static boolean isLog4jLogger(Class<?> clazz) {
}
Logger log = LoggerFactory.getLogger(clazz);
try {
- Class log4jClass = Class.forName("org.slf4j.impl.Log4jLoggerAdapter");
+ Class<?> log4jClass = Class.forName("org.slf4j.impl.Log4jLoggerAdapter");
Review Comment:
make this a constant string and use everywhere it is needed
##########
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/GenericsUtil.java:
##########
@@ -89,10 +89,30 @@ public static boolean isLog4jLogger(Class<?> clazz) {
}
Logger log = LoggerFactory.getLogger(clazz);
try {
- Class log4jClass = Class.forName("org.slf4j.impl.Log4jLoggerAdapter");
+ Class<?> log4jClass = Class.forName("org.slf4j.impl.Log4jLoggerAdapter");
return log4jClass.isInstance(log);
} catch (ClassNotFoundException e) {
return false;
}
}
+
+ /**
+ * Determine whether the log of the given logger is of Log4J implementation.
+ *
+ * @param logger the logger name, usually class name as string.
+ * @return true if the logger uses Log4J implementation.
+ */
+ public static boolean isLog4jLogger(String logger) {
+ if (logger == null) {
+ return false;
+ }
+ Logger log = LoggerFactory.getLogger(logger);
+ try {
+ Class<?> log4jClass = Class.forName("org.slf4j.impl.Log4jLoggerAdapter");
Review Comment:
if the class isn't found, then that fact can be remembered in an atomic
boolean so future loads/checks skipped.
> LogLevel servlet to determine log impl before using setLevel
> ------------------------------------------------------------
>
> Key: HADOOP-18653
> URL: https://issues.apache.org/jira/browse/HADOOP-18653
> Project: Hadoop Common
> Issue Type: Sub-task
> Reporter: Viraj Jasani
> Assignee: Viraj Jasani
> Priority: Major
> Labels: pull-request-available
>
> LogLevel GET API is used to set log level for a given class name dynamically.
> While we have cleaned up the commons-logging references, it would be great to
> determine whether slf4j log4j adapter is in the classpath before allowing
> client to set the log level.
> Proposed changes:
> * Use slf4j logger factory to get the log reference for the given class name
> * Use generic utility to identify if the slf4j log4j adapter is in the
> classpath before using log4j API to update the log level
> * If the log4j adapter is not in the classpath, report error in the output
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]