1 package org
.argeo
.init
.logging
;
3 import java
.io
.Serializable
;
4 import java
.lang
.System
.Logger
;
5 import java
.lang
.System
.LoggerFinder
;
6 import java
.util
.HashMap
;
8 import java
.util
.Objects
;
9 import java
.util
.concurrent
.Flow
;
10 import java
.util
.function
.Consumer
;
13 * Factory for Java system logging. As it has to be a public class in order to
14 * be exposed as a service provider, it is also the main entry point for the
15 * thin logging system, via static methos.
17 public class ThinLoggerFinder
extends LoggerFinder
{
18 private static ThinLogging logging
;
19 private static ThinJavaUtilLogging javaUtilLogging
;
21 public ThinLoggerFinder() {
23 throw new IllegalStateException("Only one logging can be initialised.");
28 public Logger
getLogger(String name
, Module module
) {
30 return logging
.getLogger(name
, module
);
33 private static void init() {
34 logging
= new ThinLogging();
35 reloadConfiguration();
38 /** Reload configuration form system properties */
39 public static void reloadConfiguration() {
42 Map
<String
, Object
> configuration
= new HashMap
<>();
43 for (Object key
: System
.getProperties().keySet()) {
44 Objects
.requireNonNull(key
);
45 String property
= key
.toString();
46 if (property
.startsWith(ThinLogging
.LEVEL_PROPERTY_PREFIX
)
47 || property
.equals(ThinLogging
.DEFAULT_LEVEL_PROPERTY
))
48 configuration
.put(property
, System
.getProperty(property
));
50 logging
.accept(configuration
);
54 * Falls back to java.util.logging if thin logging was not already initialised
55 * by the {@link LoggerFinder} mechanism.
57 public static void lazyInit() {
60 if (javaUtilLogging
!= null)
63 javaUtilLogging
= ThinJavaUtilLogging
.init();
64 javaUtilLogging
.readConfiguration(logging
.getLevels());
67 public static Consumer
<Map
<String
, Object
>> getConfigurationConsumer() {
68 Objects
.requireNonNull(logging
);
72 public static Flow
.Publisher
<Map
<String
, Serializable
>> getLogEntryPublisher() {
73 Objects
.requireNonNull(logging
);
74 return logging
.getLogEntryPublisher();
77 static void update(Map
<String
, Object
> configuration
) {
79 throw new IllegalStateException("Thin logging must be initialized first");
80 logging
.accept(configuration
);
81 if (javaUtilLogging
!= null)
82 javaUtilLogging
.readConfiguration(logging
.getLevels());
85 static Logger
getLogger(String name
) {
86 return logging
.getLogger(name
, null);