]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.logging/src/org/simantics/logging/LogCollector.java
Logging configuration via SCL and UI & saving to ZIP-archive
[simantics/platform.git] / bundles / org.simantics.logging / src / org / simantics / logging / LogCollector.java
1 package org.simantics.logging;
2
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;
8 import java.util.List;
9 import java.util.Map;
10
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;
16
17 public final class LogCollector {
18
19     private static final Logger LOGGER = LoggerFactory.getLogger(LogCollector.class);
20
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");
25
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);
34             }
35             results.put(key, logs);
36         }
37         if (LOGGER.isDebugEnabled())
38             LOGGER.debug("Found logs from {} providers", results.keySet());
39         return results;
40     }
41
42     private static List<LogProvider> getLogProviders() {
43         ServiceReference<?>[] serviceReferences = new ServiceReference<?>[0];
44         String key = LogProvider.class.getName();
45         try {
46             serviceReferences = Activator.getContext().getAllServiceReferences(key, null);
47         } catch (InvalidSyntaxException e) {
48             LOGGER.error("Could not get service references for {}!", key, e);
49         }
50         if (serviceReferences.length == 0) {
51             if (LOGGER.isDebugEnabled())
52                 LOGGER.debug("No service references found for {}", key);
53             return Collections.emptyList();
54         }
55
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);
60         }
61         if (LOGGER.isDebugEnabled())
62             LOGGER.debug("Found {} log providers", logProviders);
63         return logProviders;
64     }
65 }