From c0732b13010b1d83dccf6d69002a1653087ad24e Mon Sep 17 00:00:00 2001 From: Luca Milanesio Date: Sun, 24 Jun 2012 21:39:39 +0100 Subject: [PATCH] Additional log on plug-in self-registration and failures. Whenever a new class is self-registered from a plug-in additional INFO message is displayed with class name and listener / exported interface. Additionally when a Listener fails to get created from injection into a DynamicSet, an error is logged allowing the plug-in developer to understand what was the problem. Without this patch, you may see your plus-in loading correctly but then the listeners being discarded silently and you would spend a lot of time figuring out where the problem was. Change-Id: Ief3d3c5a3012136f73296a3afa5c85c22fc38bb7 --- gerrit-extension-api/pom.xml | 5 +++++ .../google/gerrit/extensions/registration/DynamicSet.java | 7 ++++++- .../google/gerrit/server/plugins/AutoRegisterModules.java | 4 ++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gerrit-extension-api/pom.xml b/gerrit-extension-api/pom.xml index ff672d5cc8..66f77e5175 100644 --- a/gerrit-extension-api/pom.xml +++ b/gerrit-extension-api/pom.xml @@ -47,6 +47,11 @@ limitations under the License. org.apache.tomcat servlet-api + + + org.slf4j + slf4j-api + diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/registration/DynamicSet.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/registration/DynamicSet.java index ec34887083..68a9914cf4 100644 --- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/registration/DynamicSet.java +++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/registration/DynamicSet.java @@ -25,6 +25,9 @@ import com.google.inject.name.Named; import com.google.inject.util.Providers; import com.google.inject.util.Types; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.Collection; import java.util.Iterator; import java.util.NoSuchElementException; @@ -39,6 +42,7 @@ import java.util.concurrent.atomic.AtomicReference; * registrations to decide between singleton and non-singleton members. */ public class DynamicSet implements Iterable { + private static final Logger log = LoggerFactory.getLogger(DynamicSet.class); /** * Declare a singleton {@code DynamicSet} with a binder. *

@@ -147,7 +151,8 @@ public class DynamicSet implements Iterable { try { next = p.get(); } catch (RuntimeException e) { - // TODO Log failed member of DynamicSet. + log.error("Cannot get iterated object from provider " + p + + ": object discared", e); } } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/plugins/AutoRegisterModules.java b/gerrit-server/src/main/java/com/google/gerrit/server/plugins/AutoRegisterModules.java index e8af06092c..b755349cd3 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/plugins/AutoRegisterModules.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/plugins/AutoRegisterModules.java @@ -192,10 +192,12 @@ class AutoRegisterModules { if (is("org.apache.sshd.server.Command", clazz)) { if (sshGen != null) { + PluginLoader.log.info("Exporting " + clazz + " as SSH Command"); sshGen.export(export, clazz); } } else if (is("javax.servlet.http.HttpServlet", clazz)) { if (httpGen != null) { + PluginLoader.log.info("Exporting " + clazz + " as HTTP Servlet"); httpGen.export(export, clazz); listen(clazz, clazz); } @@ -247,6 +249,7 @@ class AutoRegisterModules { TypeLiteral tl = TypeLiteral.get(type); if (env.hasDynamicSet(tl)) { sysSingletons.add(clazz); + PluginLoader.log.info("Registering " + clazz + " to listener " + tl); sysListen.put(tl, clazz); } else if (env.hasDynamicMap(tl)) { if (clazz.getAnnotation(Export.class) == null) { @@ -255,6 +258,7 @@ class AutoRegisterModules { clazz.getName(), rawType.getName())); } sysSingletons.add(clazz); + PluginLoader.log.info("Registering " + clazz + " to listener " + tl); sysListen.put(tl, clazz); } else { throw new InvalidPluginException(String.format(