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());