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();
36 Map
<String
, Object
> configuration
= new HashMap
<>();
37 for (Object key
: System
.getProperties().keySet()) {
38 Objects
.requireNonNull(key
);
39 String property
= key
.toString();
40 if (property
.startsWith(ThinLogging
.LEVEL_PROPERTY_PREFIX
)
41 || property
.equals(ThinLogging
.DEFAULT_LEVEL_PROPERTY
))
42 configuration
.put(property
, System
.getProperty(property
));
44 logging
.accept(configuration
);
48 * Falls back to java.util.logging if thin logging was not already initialised
49 * by the {@link LoggerFinder} mechanism.
51 public static void lazyInit() {
54 if (javaUtilLogging
!= null)
57 javaUtilLogging
= ThinJavaUtilLogging
.init();
58 javaUtilLogging
.readConfiguration(logging
.getLevels());
61 public static Consumer
<Map
<String
, Object
>> getConfigurationConsumer() {
62 Objects
.requireNonNull(logging
);
66 public static Flow
.Publisher
<Map
<String
, Serializable
>> getLogEntryPublisher() {
67 Objects
.requireNonNull(logging
);
68 return logging
.getLogEntryPublisher();
71 static void update(Map
<String
, Object
> configuration
) {
73 throw new IllegalStateException("Thin logging must be initialized first");
74 logging
.accept(configuration
);
75 if (javaUtilLogging
!= null)
76 javaUtilLogging
.readConfiguration(logging
.getLevels());
79 static Logger
getLogger(String name
) {
80 return logging
.getLogger(name
, null);