X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.logging%2Fsrc%2Forg%2Fsimantics%2Flogging%2FLogCollector.java;fp=bundles%2Forg.simantics.logging%2Fsrc%2Forg%2Fsimantics%2Flogging%2FLogCollector.java;h=4d98e27670cd071578a8194e32b2c0324f5edc95;hb=7d5a5691780ed8373e77641b4a08f18cba0b9fab;hp=0000000000000000000000000000000000000000;hpb=33b349001037197a526a49e5820f0317dc74d934;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.logging/src/org/simantics/logging/LogCollector.java b/bundles/org.simantics.logging/src/org/simantics/logging/LogCollector.java new file mode 100644 index 000000000..4d98e2767 --- /dev/null +++ b/bundles/org.simantics.logging/src/org/simantics/logging/LogCollector.java @@ -0,0 +1,65 @@ +package org.simantics.logging; + +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.osgi.framework.InvalidSyntaxException; +import org.osgi.framework.ServiceReference; +import org.simantics.logging.internal.Activator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public final class LogCollector { + + private static final Logger LOGGER = LoggerFactory.getLogger(LogCollector.class); + + public static Map> allLogs() { + Map> results = new HashMap<>(); + if (LOGGER.isDebugEnabled()) + LOGGER.debug("Collecting all logs from declarative services"); + + Collection logProviders = getLogProviders(); + for (LogProvider logProvider : logProviders) { + List logs = logProvider.get(); + String key = logProvider.getClass().getSimpleName(); + Collection existing = results.get(key); + if (existing != null) { + LOGGER.info("Duplicate log providers with name {} exist, merging logs", key); + logs.addAll(existing); + } + results.put(key, logs); + } + if (LOGGER.isDebugEnabled()) + LOGGER.debug("Found logs from {} providers", results.keySet()); + return results; + } + + private static List getLogProviders() { + ServiceReference[] serviceReferences = new ServiceReference[0]; + String key = LogProvider.class.getName(); + try { + serviceReferences = Activator.getContext().getAllServiceReferences(key, null); + } catch (InvalidSyntaxException e) { + LOGGER.error("Could not get service references for {}!", key, e); + } + if (serviceReferences.length == 0) { + if (LOGGER.isDebugEnabled()) + LOGGER.debug("No service references found for {}", key); + return Collections.emptyList(); + } + + List logProviders = new ArrayList<>(serviceReferences.length); + for (ServiceReference reference : serviceReferences) { + LogProvider logProvider = (LogProvider) Activator.getContext().getService(reference); + logProviders.add(logProvider); + } + if (LOGGER.isDebugEnabled()) + LOGGER.debug("Found {} log providers", logProviders); + return logProviders; + } +}