1 package org.simantics.logging;
3 import java.nio.file.Path;
4 import java.util.ArrayList;
5 import java.util.Collection;
6 import java.util.Collections;
7 import java.util.HashMap;
11 import org.osgi.framework.InvalidSyntaxException;
12 import org.osgi.framework.ServiceReference;
13 import org.simantics.logging.internal.Activator;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
17 public final class LogCollector {
19 private static final Logger LOGGER = LoggerFactory.getLogger(LogCollector.class);
21 public static Map<String, List<Path>> allLogs() {
22 Map<String, List<Path>> results = new HashMap<>();
23 if (LOGGER.isDebugEnabled())
24 LOGGER.debug("Collecting all logs from declarative services");
26 Collection<LogProvider> logProviders = getLogProviders();
27 for (LogProvider logProvider : logProviders) {
28 List<Path> logs = logProvider.get();
29 String key = logProvider.getClass().getSimpleName();
30 Collection<Path> existing = results.get(key);
31 if (existing != null) {
32 LOGGER.info("Duplicate log providers with name {} exist, merging logs", key);
33 logs.addAll(existing);
35 results.put(key, logs);
37 if (LOGGER.isDebugEnabled())
38 LOGGER.debug("Found logs from {} providers", results.keySet());
42 private static List<LogProvider> getLogProviders() {
43 ServiceReference<?>[] serviceReferences = new ServiceReference<?>[0];
44 String key = LogProvider.class.getName();
46 serviceReferences = Activator.getContext().getAllServiceReferences(key, null);
47 } catch (InvalidSyntaxException e) {
48 LOGGER.error("Could not get service references for {}!", key, e);
50 if (serviceReferences.length == 0) {
51 if (LOGGER.isDebugEnabled())
52 LOGGER.debug("No service references found for {}", key);
53 return Collections.emptyList();
56 List<LogProvider> logProviders = new ArrayList<>(serviceReferences.length);
57 for (ServiceReference<?> reference : serviceReferences) {
58 LogProvider logProvider = (LogProvider) Activator.getContext().getService(reference);
59 logProviders.add(logProvider);
61 if (LOGGER.isDebugEnabled())
62 LOGGER.debug("Found {} log providers", logProviders);