You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ro...@apache.org on 2013/05/01 21:43:30 UTC

svn commit: r1478161 - in /lucene/dev/branches/branch_4x: ./ solr/ solr/core/ solr/core/src/java/org/apache/solr/core/ solr/core/src/java/org/apache/solr/logging/ solr/core/src/java/org/apache/solr/logging/jul/ solr/core/src/java/org/apache/solr/loggin...

Author: romseygeek
Date: Wed May  1 19:43:30 2013
New Revision: 1478161

URL: http://svn.apache.org/r1478161
Log:
SOLR-4778: Move LogWatcher init code out of CoreContainer

Added:
    lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/logging/
      - copied from r1478152, lucene/dev/trunk/solr/core/src/test/org/apache/solr/logging/
Modified:
    lucene/dev/branches/branch_4x/   (props changed)
    lucene/dev/branches/branch_4x/solr/   (props changed)
    lucene/dev/branches/branch_4x/solr/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/branch_4x/solr/core/   (props changed)
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/LogWatcher.java
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/jul/JulWatcher.java
    lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/log4j/Log4jWatcher.java
    lucene/dev/branches/branch_4x/solr/test-framework/   (props changed)
    lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java

Modified: lucene/dev/branches/branch_4x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/CHANGES.txt?rev=1478161&r1=1478160&r2=1478161&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/solr/CHANGES.txt Wed May  1 19:43:30 2013
@@ -33,6 +33,10 @@ Apache ZooKeeper 3.4.5
 Upgrading from Solr 4.3.0
 ----------------------
 
+* SOLR-4778: The signature of LogWatcher.registerListener has changed, from
+  (ListenerConfig, CoreContainer) to (ListenerConfig).  Users implementing their
+  own LogWatcher classes will need to change their code accordingly.
+
 Detailed Change List
 ----------------------
 
@@ -81,6 +85,8 @@ Other Changes
 * SOLR-4759: Velocity (/browse) template cosmetic cleanup.
   (Mark Bennett, ehatcher)
 
+* SOLR-4778: LogWatcher init code moved out of CoreContainer (Alan Woodward)
+
 ==================  4.3.0 ==================
 
 Versions of Major Components

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java?rev=1478161&r1=1478160&r2=1478161&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java Wed May  1 19:43:30 2013
@@ -17,6 +17,38 @@
 
 package org.apache.solr.core;
 
+import org.apache.commons.io.IOUtils;
+import org.apache.solr.cloud.ZkController;
+import org.apache.solr.cloud.ZkSolrResourceLoader;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.SolrException.ErrorCode;
+import org.apache.solr.common.cloud.ZooKeeperException;
+import org.apache.solr.common.util.ExecutorUtil;
+import org.apache.solr.handler.admin.CollectionsHandler;
+import org.apache.solr.handler.admin.CoreAdminHandler;
+import org.apache.solr.handler.component.HttpShardHandlerFactory;
+import org.apache.solr.handler.component.ShardHandlerFactory;
+import org.apache.solr.logging.LogWatcher;
+import org.apache.solr.logging.jul.JulWatcher;
+import org.apache.solr.schema.IndexSchema;
+import org.apache.solr.schema.IndexSchemaFactory;
+import org.apache.solr.util.DefaultSolrThreadFactory;
+import org.apache.solr.util.FileUtils;
+import org.apache.solr.util.PropertiesUtil;
+import org.apache.solr.util.plugin.PluginInfoInitialized;
+import org.apache.zookeeper.KeeperException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.xml.sax.InputSource;
+
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.xpath.XPathExpressionException;
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
@@ -44,42 +76,6 @@ import java.util.concurrent.LinkedBlocki
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMResult;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.xpath.XPathExpressionException;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.solr.cloud.ZkController;
-import org.apache.solr.cloud.ZkSolrResourceLoader;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.SolrException.ErrorCode;
-import org.apache.solr.common.cloud.ZooKeeperException;
-import org.apache.solr.common.util.ExecutorUtil;
-import org.apache.solr.handler.admin.CollectionsHandler;
-import org.apache.solr.handler.admin.CoreAdminHandler;
-import org.apache.solr.handler.component.HttpShardHandlerFactory;
-import org.apache.solr.handler.component.ShardHandlerFactory;
-import org.apache.solr.logging.ListenerConfig;
-import org.apache.solr.logging.LogWatcher;
-import org.apache.solr.logging.jul.JulWatcher;
-import org.apache.solr.logging.log4j.Log4jWatcher;
-import org.apache.solr.schema.IndexSchema;
-import org.apache.solr.schema.IndexSchemaFactory;
-import org.apache.solr.util.DefaultSolrThreadFactory;
-import org.apache.solr.util.FileUtils;
-import org.apache.solr.util.PropertiesUtil;
-import org.apache.solr.util.plugin.PluginInfoInitialized;
-import org.apache.zookeeper.KeeperException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.slf4j.impl.StaticLoggerBinder;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.xml.sax.InputSource;
-
 
 /**
  *
@@ -282,51 +278,7 @@ public class CoreContainer
 
     solrCores.allocateLazyCores(cfg, loader);
 
-    // Initialize Logging
-    if (cfg.getBool(ConfigSolr.CfgProp.SOLR_LOGGING_ENABLED, true)) {
-      String slf4jImpl = null;
-      String fname = cfg.get(ConfigSolr.CfgProp.SOLR_LOGGING_CLASS, null);
-      try {
-        slf4jImpl = StaticLoggerBinder.getSingleton()
-            .getLoggerFactoryClassStr();
-        if (fname == null) {
-          if (slf4jImpl.indexOf("Log4j") > 0) {
-            fname = "Log4j";
-          } else if (slf4jImpl.indexOf("JDK") > 0) {
-            fname = "JUL";
-          }
-        }
-      } catch (Throwable ex) {
-        log.warn("Unable to read SLF4J version.  LogWatcher will be disabled: " + ex);
-      }
-      
-      // Now load the framework
-      if (fname != null) {
-        if ("JUL".equalsIgnoreCase(fname)) {
-          logging = new JulWatcher(slf4jImpl);
-        }
-        else if( "Log4j".equals(fname) ) {
-          logging = new Log4jWatcher(slf4jImpl);
-        } else {
-          try {
-            logging = loader.newInstance(fname, LogWatcher.class);
-          } catch (Throwable e) {
-            log.warn("Unable to load LogWatcher", e);
-          }
-        }
-        
-        if (logging != null) {
-          ListenerConfig v = new ListenerConfig();
-          v.size = cfg.getInt(ConfigSolr.CfgProp.SOLR_LOGGING_WATCHER_SIZE, 50);
-          v.threshold = cfg.get(ConfigSolr.CfgProp.SOLR_LOGGING_WATCHER_THRESHOLD, null);
-          if (v.size > 0) {
-            log.info("Registering Log Listener");
-            logging.registerListener(v, this);
-          }
-        }
-      }
-    }
-
+    logging = JulWatcher.newRegisteredLogWatcher(cfg, loader);
 
     if (cfg instanceof ConfigSolrXmlOld) { //TODO: Remove for 5.0
       String dcoreName = cfg.get(ConfigSolr.CfgProp.SOLR_CORES_DEFAULT_CORE_NAME, null);

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/LogWatcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/LogWatcher.java?rev=1478161&r1=1478160&r2=1478161&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/LogWatcher.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/LogWatcher.java Wed May  1 19:43:30 2013
@@ -17,21 +17,29 @@
 
 package org.apache.solr.logging;
 
+import org.apache.solr.common.SolrDocument;
+import org.apache.solr.common.SolrDocumentList;
+import org.apache.solr.core.ConfigSolr;
+import org.apache.solr.core.SolrResourceLoader;
+import org.apache.solr.logging.jul.JulWatcher;
+import org.apache.solr.logging.log4j.Log4jWatcher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.impl.StaticLoggerBinder;
+
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.apache.solr.common.SolrDocument;
-import org.apache.solr.common.SolrDocumentList;
-import org.apache.solr.core.CoreContainer;
-
 /**
  * A Class to monitor Logging events and hold N events in memory
  * 
  * This is abstract so we can support both JUL and Log4j (and other logging platforms)
  */
 public abstract class LogWatcher<E> {
+
+  private static final Logger log = LoggerFactory.getLogger(LogWatcher.class);
   
   protected CircularList<E> history;
   protected long last = -1;
@@ -98,10 +106,82 @@ public abstract class LogWatcher<E> {
   public abstract long getTimestamp(E event);
   public abstract SolrDocument toSolrDocument(E event);
   
-  public abstract void registerListener(ListenerConfig cfg, CoreContainer container);
+  public abstract void registerListener(ListenerConfig cfg);
 
   public void reset() {
     history.clear();
     last = -1;
   }
-}
\ No newline at end of file
+
+  /**
+   * Create and register a LogWatcher.
+   *
+   * JUL and Log4j watchers are supported out-of-the-box.  You can register your own
+   * LogWatcher implementation via the plugins architecture
+   *
+   * @param config the CoreContainer's config, with logging configuration details
+   * @param loader a SolrResourceLoader, to be used to load plugin LogWatcher implementations.
+   *               Can be null if one of the built-in implementations is being used.
+   *
+   * @return a LogWatcher configured for the container's logging framework
+   */
+  public static LogWatcher newRegisteredLogWatcher(ConfigSolr config, SolrResourceLoader loader) {
+
+    if (!config.getBool(ConfigSolr.CfgProp.SOLR_LOGGING_ENABLED, true))
+      return null;
+
+    LogWatcher logWatcher = createWatcher(config, loader);
+
+    if (logWatcher != null) {
+      ListenerConfig v = new ListenerConfig();
+      v.size = config.getInt(ConfigSolr.CfgProp.SOLR_LOGGING_WATCHER_SIZE, 50);
+      v.threshold = config.get(ConfigSolr.CfgProp.SOLR_LOGGING_WATCHER_THRESHOLD, null);
+      if (v.size > 0) {
+        log.info("Registering Log Listener");
+        logWatcher.registerListener(v);
+      }
+    }
+
+    return logWatcher;
+  }
+
+  private static LogWatcher createWatcher(ConfigSolr config, SolrResourceLoader loader) {
+
+    String fname = config.get(ConfigSolr.CfgProp.SOLR_LOGGING_CLASS, null);
+    String slf4jImpl;
+
+    try {
+      slf4jImpl = StaticLoggerBinder.getSingleton().getLoggerFactoryClassStr();
+      if (fname == null) {
+        if (slf4jImpl.indexOf("Log4j") > 0) {
+          fname = "Log4j";
+        } else if (slf4jImpl.indexOf("JDK") > 0) {
+          fname = "JUL";
+        }
+      }
+    }
+    catch (Throwable e) {
+      log.warn("Unable to read SLF4J version.  LogWatcher will be disabled: " + e);
+      return null;
+    }
+
+    if (fname == null) {
+      log.info("No LogWatcher configured");
+      return null;
+    }
+
+    if ("JUL".equalsIgnoreCase(fname))
+      return new JulWatcher(slf4jImpl);
+    if ("Log4j".equals(fname))
+      return new Log4jWatcher(slf4jImpl);
+
+    try {
+      return loader != null ? loader.newInstance(fname, LogWatcher.class) : null;
+    }
+    catch (Throwable e) {
+      log.warn("Unable to load LogWatcher {}: {}", fname, e);
+    }
+
+    return null;
+  }
+}

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/jul/JulWatcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/jul/JulWatcher.java?rev=1478161&r1=1478160&r2=1478161&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/jul/JulWatcher.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/jul/JulWatcher.java Wed May  1 19:43:30 2013
@@ -16,6 +16,13 @@
  */
 package org.apache.solr.logging.jul;
 
+import com.google.common.base.Throwables;
+import org.apache.solr.common.SolrDocument;
+import org.apache.solr.logging.CircularList;
+import org.apache.solr.logging.ListenerConfig;
+import org.apache.solr.logging.LogWatcher;
+import org.apache.solr.logging.LoggerInfo;
+
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Date;
@@ -28,15 +35,6 @@ import java.util.logging.LogManager;
 import java.util.logging.LogRecord;
 import java.util.logging.Logger;
 
-import org.apache.solr.common.SolrDocument;
-import org.apache.solr.core.CoreContainer;
-import org.apache.solr.logging.CircularList;
-import org.apache.solr.logging.ListenerConfig;
-import org.apache.solr.logging.LoggerInfo;
-import org.apache.solr.logging.LogWatcher;
-
-import com.google.common.base.Throwables;
-
 public class JulWatcher extends LogWatcher<LogRecord> {
 
   final String name;
@@ -131,7 +129,7 @@ public class JulWatcher extends LogWatch
   }
 
   @Override
-  public void registerListener(ListenerConfig cfg, CoreContainer container) {
+  public void registerListener(ListenerConfig cfg) {
     if(history!=null) {
       throw new IllegalStateException("History already registered");
     }

Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/log4j/Log4jWatcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/log4j/Log4jWatcher.java?rev=1478161&r1=1478160&r2=1478161&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/log4j/Log4jWatcher.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/log4j/Log4jWatcher.java Wed May  1 19:43:30 2013
@@ -17,27 +17,25 @@
 package org.apache.solr.logging.log4j;
 
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
+import com.google.common.base.Throwables;
 import org.apache.log4j.AppenderSkeleton;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.log4j.spi.LoggingEvent;
 import org.apache.log4j.spi.ThrowableInformation;
 import org.apache.solr.common.SolrDocument;
-import org.apache.solr.core.CoreContainer;
 import org.apache.solr.logging.CircularList;
 import org.apache.solr.logging.ListenerConfig;
 import org.apache.solr.logging.LogWatcher;
 import org.apache.solr.logging.LoggerInfo;
 
-import com.google.common.base.Throwables;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 public class Log4jWatcher extends LogWatcher<LoggingEvent> {
 
@@ -124,7 +122,7 @@ public class Log4jWatcher extends LogWat
   }
 
   @Override
-  public void registerListener(ListenerConfig cfg, CoreContainer container) {
+  public void registerListener(ListenerConfig cfg) {
     if(history!=null) {
       throw new IllegalStateException("History already registered");
     }

Modified: lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java?rev=1478161&r1=1478160&r2=1478161&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java (original)
+++ lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java Wed May  1 19:43:30 2013
@@ -201,7 +201,7 @@ public class TestHarness extends BaseTes
         throw new RuntimeException(e);
       }
       LogWatcher<?> logging = new JulWatcher("test");
-      logging.registerListener(new ListenerConfig(), container);
+      logging.registerListener(new ListenerConfig());
       container.setLogging(logging);
       
       CoreDescriptor dcore = new CoreDescriptor(container, coreName, solrConfig.getResourceLoader().getInstanceDir());