From 5a7dbcb81cc7af68b7e3d28c3a9e4eba81ed704e Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 11 Apr 2012 17:53:39 +0200 Subject: [PATCH] improve logging for loading of plugins --- .../sonia/scm/boot/BootstrapListener.java | 32 +++++++-- .../sonia/scm/plugin/DefaultPluginLoader.java | 67 +++++++++++++++++-- 2 files changed, 90 insertions(+), 9 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/boot/BootstrapListener.java b/scm-webapp/src/main/java/sonia/scm/boot/BootstrapListener.java index 9e8e90f47e..c6f45f2bc3 100644 --- a/scm-webapp/src/main/java/sonia/scm/boot/BootstrapListener.java +++ b/scm-webapp/src/main/java/sonia/scm/boot/BootstrapListener.java @@ -126,13 +126,21 @@ public class BootstrapListener implements ServletContextListener { classLoader = createClassLoader(pluginDirectory, classpath); } + else if (logger.isErrorEnabled()) + { + logger.error("classloader is null"); + } } catch (Exception ex) { - logger.error(ex.getMessage(), ex); + logger.error("could not load classpath from plugin folder", ex); } } } + else if (logger.isDebugEnabled()) + { + logger.debug("no plugin directory found"); + } if (classLoader != null) { @@ -173,6 +181,11 @@ public class BootstrapListener implements ServletContextListener private ClassLoader createClassLoader(File pluginDirectory, Classpath classpath) { + if (logger.isDebugEnabled()) + { + logger.debug("create classloader from plugin classpath"); + } + List classpathURLs = new LinkedList(); for (String path : classpath) @@ -188,18 +201,24 @@ public class BootstrapListener implements ServletContextListener { try { + URL url = file.toURI().toURL(); + if (logger.isDebugEnabled()) { - logger.debug("append {} to classpath", file.getPath()); + logger.debug("append {} to classpath", url.toExternalForm()); } - classpathURLs.add(file.toURI().toURL()); + classpathURLs.add(url); } catch (MalformedURLException ex) { - logger.error(ex.getMessage(), ex); + logger.error("could not append url to classpath", ex); } } + else if (logger.isErrorEnabled()) + { + logger.error("plugin file {} does not exists", file); + } } return new URLClassLoader(classpathURLs.toArray(new URL[0]), @@ -220,6 +239,11 @@ public class BootstrapListener implements ServletContextListener if (classLoader == null) { + if (logger.isWarnEnabled()) + { + logger.warn("could not use context classloader, try to use default"); + } + classLoader = BootstrapListener.class.getClassLoader(); } diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginLoader.java b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginLoader.java index c7373e7e59..c14e4e0cfa 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginLoader.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginLoader.java @@ -119,6 +119,12 @@ public class DefaultPluginLoader implements PluginLoader for (Plugin plugin : installedPlugins) { + if (logger.isDebugEnabled()) + { + logger.debug("search extensions from plugin {}", + plugin.getInformation().getId()); + } + InputStream input = null; try @@ -136,6 +142,17 @@ public class DefaultPluginLoader implements PluginLoader if (pluginFile.exists()) { + if (logger.isTraceEnabled()) + { + String type = pluginFile.isDirectory() + ? "directory" + : "jar"; + + logger.trace("search extensions in packages {} of {} plugin {}", + new Object[] { extensions, + type, pluginFile }); + } + if (pluginFile.isDirectory()) { scanner.processExtensions(classLoader, extensions, pluginFile, @@ -163,8 +180,18 @@ public class DefaultPluginLoader implements PluginLoader } } + if (logger.isTraceEnabled()) + { + logger.trace("start processing {} extensions", extensions.size()); + } + for (ExtensionObject exo : extensions) { + if (logger.isTraceEnabled()) + { + logger.trace("process extension {}", exo.getExtensionClass()); + } + processor.processExtension(exo.getExtension(), exo.getExtensionClass()); } } @@ -205,9 +232,14 @@ public class DefaultPluginLoader implements PluginLoader } catch (IOException ex) { - logger.error(ex.getMessage(), ex); + logger.error("could not decode path ".concat(path), ex); } } + else if (logger.isTraceEnabled()) + { + logger.trace( + "{} seems not to be a file path or the file does not exists", path); + } return path; } @@ -232,6 +264,15 @@ public class DefaultPluginLoader implements PluginLoader loadPlugin(url); } + + if (logger.isDebugEnabled()) + { + logger.debug("loaded {} plugins", installedPlugins.size()); + } + } + else if (logger.isWarnEnabled()) + { + logger.warn("no plugin descriptor found"); } } @@ -245,6 +286,11 @@ public class DefaultPluginLoader implements PluginLoader { String path = url.toExternalForm(); + if (logger.isTraceEnabled()) + { + logger.trace("try to load plugin from {}", path); + } + try { if (path.startsWith("file:")) @@ -265,9 +311,9 @@ public class DefaultPluginLoader implements PluginLoader if (logger.isInfoEnabled()) { - logger.info("load {}plugin {}", corePlugin - ? "core " - : " ", path); + logger.info("load {} plugin {}", corePlugin + ? "core " + : " ", path); } Plugin plugin = JAXB.unmarshal(url, Plugin.class); @@ -287,6 +333,12 @@ public class DefaultPluginLoader implements PluginLoader } plugin.setPath(path); + + if (logger.isDebugEnabled()) + { + logger.debug("add plugin {} to installed plugins", info.getId()); + } + installedPlugins.add(plugin); } catch (Exception ex) @@ -298,7 +350,7 @@ public class DefaultPluginLoader implements PluginLoader //~--- get methods ---------------------------------------------------------- /** - * Method description + * TODO create util method * * * @return @@ -309,6 +361,11 @@ public class DefaultPluginLoader implements PluginLoader if (classLoader == null) { + if (logger.isWarnEnabled()) + { + logger.warn("could not use context classloader, try to use default"); + } + classLoader = DefaultPluginManager.class.getClassLoader(); }