This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.commons.logservice-1.0.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-logservice.git
commit 035cdda8857f738aa75a729d09ebe4d670da4a89 Author: Felix Meschberger <[email protected]> AuthorDate: Sun Oct 2 14:55:26 2011 +0000 SLING-2235 Use size limited, access ordered cache for bundle loggers and remove entries for uninstalled bundles git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/logservice@1178194 13f79535-47bb-0310-9956-ffa450edef68 --- .../commons/logservice/internal/LogSupport.java | 34 +++++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/apache/sling/commons/logservice/internal/LogSupport.java b/src/main/java/org/apache/sling/commons/logservice/internal/LogSupport.java index 8a78926..d40d6e0 100644 --- a/src/main/java/org/apache/sling/commons/logservice/internal/LogSupport.java +++ b/src/main/java/org/apache/sling/commons/logservice/internal/LogSupport.java @@ -18,7 +18,7 @@ package org.apache.sling.commons.logservice.internal; import java.util.Collections; import java.util.Enumeration; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; @@ -67,7 +67,15 @@ public class LogSupport implements BundleListener, ServiceListener, // The loggers by bundle id used for logging messages originated from // specific bundles - private Map<Long, Logger> loggers = new HashMap<Long, Logger>(); + @SuppressWarnings("serial") + private Map<Long, Logger> loggers = new LinkedHashMap<Long, Logger>(16, + 0.75f, true) { + private static final int MAX_SIZE = 50; + + protected boolean removeEldestEntry(Map.Entry<Long, Logger> eldest) { + return size() > MAX_SIZE; + } + }; // the worker thread actually sending LogEvents to LogListeners private LogEntryDispatcher logEntryDispatcher; @@ -233,6 +241,8 @@ public class LogSupport implements BundleListener, ServiceListener, message = "BundleEvent UPDATED"; break; case BundleEvent.UNINSTALLED: + // remove any cached logger for the uninstalled bundle + ungetLogger(event.getBundle()); message = "BundleEvent UNINSTALLED"; break; case BundleEvent.RESOLVED: @@ -366,7 +376,10 @@ public class LogSupport implements BundleListener, ServiceListener, */ private Logger getLogger(Bundle bundle) { Long bundleId = new Long((bundle == null) ? 0 : bundle.getBundleId()); - Logger log = loggers.get(bundleId); + Logger log; + synchronized (loggers) { + log = loggers.get(bundleId); + } if (log == null) { String name; @@ -392,12 +405,25 @@ public class LogSupport implements BundleListener, ServiceListener, } log = LoggerFactory.getLogger(name); - loggers.put(bundleId, log); + synchronized (loggers) { + loggers.put(bundleId, log); + } } return log; } /** + * Removes the cached logger for the given bundle, for example if the + * bundle is uninstalled and thus there will be no more logs from this + * bundle. + */ + private void ungetLogger(Bundle bundle) { + synchronized (loggers) { + loggers.remove(bundle.getBundleId()); + } + } + + /** * Actually logs the given log entry to the logger for the bundle recorded * in the log entry. */ -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
