File tree Expand file tree Collapse file tree
src/main/java/org/mangorage/bootstrap Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ package org .mangorage .bootstrap .api .logging ;
2+
3+ public interface IDeferredMangoLogger {
4+ IMangoLogger get ();
5+ }
Original file line number Diff line number Diff line change 11package org .mangorage .bootstrap .api .logging ;
22
33import org .mangorage .bootstrap .internal .logger .DefaultLoggerFactory ;
4+ import org .mangorage .bootstrap .internal .logger .DeferredMangoLogger ;
45
56public interface ILoggerFactory {
67 static ILoggerFactory getDefault () {
@@ -17,22 +18,7 @@ static ILoggerFactory getDefault() {
1718 * Gets the wrapped logger provider by its name. This is used to get the underlying logger provider
1819 * Sometimes providers come in later then originally requested, so this method can be used to use the provider after it has been loaded.
1920 */
20- default ILoggerProvider getWrappedProvider (String providerName ) {
21- return new ILoggerProvider () {
22- private volatile ILoggerProvider delegate ;
23-
24- @ Override
25- public String getName () {
26- return delegate == null ? providerName : delegate .getName ();
27- }
28-
29- @ Override
30- public IMangoLogger getLogger (String name ) {
31- if (delegate == null ) {
32- delegate = getProvider (providerName );
33- }
34- return delegate .getLogger (name );
35- }
36- };
21+ default IDeferredMangoLogger getWrappedProvider (String providerName ) {
22+ return new DeferredMangoLogger (providerName , provider -> provider .getLogger (providerName ));
3723 }
3824}
Original file line number Diff line number Diff line change 1+ package org .mangorage .bootstrap .internal .logger ;
2+
3+ import org .mangorage .bootstrap .api .logging .IDeferredMangoLogger ;
4+ import org .mangorage .bootstrap .api .logging .ILoggerFactory ;
5+ import org .mangorage .bootstrap .api .logging .ILoggerProvider ;
6+ import org .mangorage .bootstrap .api .logging .IMangoLogger ;
7+
8+ import java .util .function .Function ;
9+
10+ public final class DeferredMangoLogger implements IDeferredMangoLogger {
11+
12+ private final String provider ;
13+ private final Function <ILoggerProvider , IMangoLogger > loggerFunction ;
14+ private volatile IMangoLogger logger ;
15+
16+ public DeferredMangoLogger (String provider , Function <ILoggerProvider , IMangoLogger > loggerFunction ) {
17+ this .provider = provider ;
18+ this .loggerFunction = loggerFunction ;
19+ }
20+
21+
22+ @ Override
23+ public IMangoLogger get () {
24+ if (logger == null ) {
25+ synchronized (this ) {
26+ if (logger == null ) {
27+ ILoggerProvider loggerProvider = ILoggerFactory .getDefault ().getProvider (provider );
28+ logger = loggerFunction .apply (loggerProvider );
29+ if (logger != null ) return logger ;
30+ }
31+ }
32+ }
33+ return loggerFunction .apply (ILoggerFactory .getDefault ().getProvider ("default" ));
34+ }
35+ }
You can’t perform that action at this time.
0 commit comments