Skip to content

Commit 898b777

Browse files
committed
Updated to using a better DeferredMangoLogger
1 parent 0811b2c commit 898b777

3 files changed

Lines changed: 43 additions & 17 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package org.mangorage.bootstrap.api.logging;
2+
3+
public interface IDeferredMangoLogger {
4+
IMangoLogger get();
5+
}
Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.mangorage.bootstrap.api.logging;
22

33
import org.mangorage.bootstrap.internal.logger.DefaultLoggerFactory;
4+
import org.mangorage.bootstrap.internal.logger.DeferredMangoLogger;
45

56
public 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
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
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+
}

0 commit comments

Comments
 (0)