You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ry...@apache.org on 2012/04/13 18:18:33 UTC
svn commit: r1325828 - in /lucene/dev/trunk/solr:
core/src/java/org/apache/solr/handler/admin/LogLevelHandler.java
webapp/web/css/styles/logging.css
Author: ryan
Date: Fri Apr 13 16:18:32 2012
New Revision: 1325828
URL: http://svn.apache.org/viewvc?rev=1325828&view=rev
Log:
SOLR-3356: Logging UI now works when using log4j (and gives an error when using something other then JUL or Log4j)
Modified:
lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/LogLevelHandler.java
lucene/dev/trunk/solr/webapp/web/css/styles/logging.css
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/LogLevelHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/LogLevelHandler.java?rev=1325828&r1=1325827&r2=1325828&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/LogLevelHandler.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/LogLevelHandler.java Fri Apr 13 16:18:32 2012
@@ -17,8 +17,7 @@
package org.apache.solr.handler.admin;
-import java.net.MalformedURLException;
-import java.net.URL;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -39,6 +38,7 @@ import org.apache.solr.common.util.Simpl
import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
+import org.slf4j.impl.StaticLoggerBinder;
/**
@@ -230,7 +230,6 @@ public class LogLevelHandler extends Req
}
}
- /****
//-------------------------------------------------------------------------------------------------
//
// Log4j
@@ -250,13 +249,22 @@ public class LogLevelHandler extends Req
if(logger==null) {
return null;
}
- return logger.getLevel().toString();
+ Object level = logger.getLevel();
+ if(level==null) {
+ return null;
+ }
+ return level.toString();
}
@Override
public String getName() {
return name;
}
+
+ @Override
+ public boolean isSet() {
+ return (logger!=null && logger.getLevel()!=null);
+ }
}
public static class LoggerFactoryWrapperLog4j implements LoggerFactoryWrapper {
@@ -286,10 +294,25 @@ public class LogLevelHandler extends Req
}
org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(category);
if(level==null||"unset".equals(level)||"null".equals(level)) {
- log.setLevel(null);
+ setLevelWithReflection(log,null);
}
else {
- log.setLevel(org.apache.log4j.Level.toLevel(level));
+ setLevelWithReflection(log,org.apache.log4j.Level.toLevel(level));
+ }
+ }
+
+ /**
+ * log.setLevel(level);
+ */
+ private void setLevelWithReflection(org.apache.log4j.Logger log, org.apache.log4j.Level level) {
+ try {
+ Class<?> logclass = Class.forName("org.apache.log4j.Logger");
+ Class<?> levelclass = Class.forName("org.apache.log4j.Level");
+ Method method = logclass.getMethod("setLevel", levelclass);
+ method.invoke(log, level);
+ }
+ catch(Exception ex) {
+ throw new RuntimeException("Unable to set Log4j Level", ex);
}
}
@@ -321,7 +344,7 @@ public class LogLevelHandler extends Req
return map.values();
}
}
- ***/
+
//-------------------------------------------------------------------------------------------------
//
@@ -330,16 +353,32 @@ public class LogLevelHandler extends Req
//-------------------------------------------------------------------------------------------------
LoggerFactoryWrapper factory;
+ String slf4jImpl = null;
@Override
public void init(NamedList args) {
String fname = (String)args.get("logger.factory");
- if(fname == null || "JUL".equalsIgnoreCase(fname)) {
+ try {
+ slf4jImpl = StaticLoggerBinder.getSingleton().getLoggerFactoryClassStr();
+ if(fname == null ) {
+ if( slf4jImpl.indexOf("Log4j") > 0) {
+ fname = "Log4j";
+ }
+ else if( slf4jImpl.indexOf("JDK") > 0) {
+ fname = "JUL";
+ }
+ else {
+ return; // unsuppored
+ }
+ }
+ }
+ catch(Exception ex) {}
+
+ if("JUL".equalsIgnoreCase(fname)) {
factory = new LoggerFactoryWrapperJUL();
}
else if( "Log4j".equals(fname) ) {
- throw new SolrException(ErrorCode.SERVER_ERROR, "Log4j not yet supported");
- // factory = new LoggerFactoryWrapperLog4j();
+ factory = new LoggerFactoryWrapperLog4j();
}
else {
try {
@@ -353,6 +392,12 @@ public class LogLevelHandler extends Req
@Override
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
+ // Don't do anything if the framework is unknown
+ if(factory==null) {
+ rsp.add("error", "Unsupported Logging Framework: "+slf4jImpl);
+ return;
+ }
+
SolrParams params = req.getParams();
String[] set = params.getParams("set");
if (set != null) {
@@ -371,6 +416,7 @@ public class LogLevelHandler extends Req
}
rsp.add("framework", factory.getName());
+ rsp.add("slfj4", slf4jImpl);
rsp.add("levels", factory.getAllLevels());
List<LoggerWrapper> loggers = new ArrayList<LogLevelHandler.LoggerWrapper>(factory.getLoggers());
@@ -395,13 +441,4 @@ public class LogLevelHandler extends Req
public String getSource() {
return "$URL$";
}
-
- @Override
- public URL[] getDocs() {
- try {
- return new URL[] { new URL("http://wiki.apache.org/solr/LogLevelHandler") };
- } catch (MalformedURLException ex) {
- return null;
- }
- }
}
Modified: lucene/dev/trunk/solr/webapp/web/css/styles/logging.css
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/webapp/web/css/styles/logging.css?rev=1325828&r1=1325827&r2=1325828&view=diff
==============================================================================
--- lucene/dev/trunk/solr/webapp/web/css/styles/logging.css (original)
+++ lucene/dev/trunk/solr/webapp/web/css/styles/logging.css Fri Apr 13 16:18:32 2012
@@ -22,6 +22,15 @@
#content #logging .jstree .level-severe { background-color: #fcdcda; }
#content #logging .jstree .level-off { background-color: #ffffff; }
+/* Log4j */
+#content #logging .jstree .level-all { background-color: #9EDAFF; }
+#content #logging .jstree .level-trace { background-color: #d5e5fc; }
+#content #logging .jstree .level-debug { background-color: #d5fafc; }
+#content #logging .jstree .level-warn { background-color: #e6fded; }
+#content #logging .jstree .level-error { background-color: #fcecd5; }
+#content #logging .jstree .level-fatal { background-color: #fcdcda; }
+
+
#content #logging .jstree a
{
height: 17px;