Merge tag 'v2.3.28' into testing
[lgpl/argeo-commons.git] / org.argeo.init / src / org / argeo / init / logging / ThinLoggerFinder.java
index e60d22fba1061238e20da6b0071afdfdcf03ca7a..3fa2bc868848baa2ba1528cdd189e4f958a137c6 100644 (file)
@@ -7,14 +7,17 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.Flow;
+import java.util.concurrent.Flow.Publisher;
 import java.util.function.Consumer;
+import java.util.function.Supplier;
 
 /**
  * Factory for Java system logging. As it has to be a public class in order to
  * be exposed as a service provider, it is also the main entry point for the
  * thin logging system, via static methos.
  */
-public class ThinLoggerFinder extends LoggerFinder {
+public class ThinLoggerFinder extends LoggerFinder
+               implements Consumer<Map<String, Object>>, Supplier<Flow.Publisher<Map<String, Serializable>>> {
        private static ThinLogging logging;
        private static ThinJavaUtilLogging javaUtilLogging;
 
@@ -27,7 +30,10 @@ public class ThinLoggerFinder extends LoggerFinder {
        @Override
        public Logger getLogger(String name, Module module) {
                lazyInit();
-               return logging.getLogger(name, module);
+               Objects.requireNonNull(name);
+               Logger logger = logging.getLogger(name, module);
+               Objects.requireNonNull(logger);
+               return logger;
        }
 
        private static void init() {
@@ -64,16 +70,21 @@ public class ThinLoggerFinder extends LoggerFinder {
                javaUtilLogging.readConfiguration(logging.getLevels());
        }
 
-       public static Consumer<Map<String, Object>> getConfigurationConsumer() {
+       static Consumer<Map<String, Object>> getConfigurationConsumer() {
                Objects.requireNonNull(logging);
                return logging;
        }
 
-       public static Flow.Publisher<Map<String, Serializable>> getLogEntryPublisher() {
+       static Flow.Publisher<Map<String, Serializable>> getLogEntryPublisher() {
                Objects.requireNonNull(logging);
                return logging.getLogEntryPublisher();
        }
 
+       @Override
+       public Publisher<Map<String, Serializable>> get() {
+               return getLogEntryPublisher();
+       }
+
        static void update(Map<String, Object> configuration) {
                if (logging == null)
                        throw new IllegalStateException("Thin logging must be initialized first");
@@ -85,4 +96,17 @@ public class ThinLoggerFinder extends LoggerFinder {
        static Logger getLogger(String name) {
                return logging.getLogger(name, null);
        }
+
+       @Override
+       public void accept(Map<String, Object> t) {
+               if (logging != null) {
+                       // delegate to thin logging
+                       logging.accept(t);
+               } else {
+                       // ignore
+                       // TODO try to congure Java logging ?
+               }
+
+       }
+
 }