Skip to content

Commit

Permalink
More refactoring based on Spring Logback style
Browse files Browse the repository at this point in the history
  • Loading branch information
agentgt committed Oct 13, 2023
1 parent c168b0d commit 9bb2024
Show file tree
Hide file tree
Showing 8 changed files with 62 additions and 16 deletions.
2 changes: 1 addition & 1 deletion core/src/main/java/io/jstach/rainbowgum/LevelResolver.java
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ abstract class AbstractBuilder<T> {

protected boolean levelResolverCached = true;

public T level(String loggerName, Level level) {
public T level(Level level, String loggerName) {
levels.put(loggerName, level);
return self();
}
Expand Down
4 changes: 2 additions & 2 deletions core/src/main/java/io/jstach/rainbowgum/LogConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class DefaultLogConfig implements LogConfig, ConfigLevelResolver, LogProperties

@Override
public @Nullable String property(String key) {
return properties.property("rainbowgum." + key);
return properties.property("logging." + key);
}

public DefaultLogConfig(LogProperties properties) {
Expand Down Expand Up @@ -84,7 +84,7 @@ public Level resolveLevel(String name) {

@Override
public String levelPropertyPrefix() {
return "log";
return "level";
}

}
33 changes: 31 additions & 2 deletions core/src/main/java/io/jstach/rainbowgum/LogProperties.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Function;

import org.eclipse.jdt.annotation.Nullable;
Expand Down Expand Up @@ -123,7 +124,7 @@ default T require() {
return t;
}

default <U> Property<U> map(Function<? super T, ? extends U> mapper) {
default <U> Property<U> map(PropertyFunction<? super T, ? extends U, ? super Exception> mapper) {
Objects.requireNonNull(mapper);
var v = orNull();
if (v == null) {
Expand All @@ -138,7 +139,7 @@ default <U> Property<U> map(Function<? super T, ? extends U> mapper) {
}
}

default StringValue mapString(Function<? super T, String> mapper) {
default StringValue mapString(PropertyFunction<? super T, String, ? super Exception> mapper) {
Objects.requireNonNull(mapper);
var v = orNull();
if (v == null) {
Expand All @@ -161,6 +162,10 @@ default T requireElse(T fallback) {
return t;
}

default Optional<T> optional() {
return Optional.ofNullable(orNull());
}

record EmptyValue<T>(String key, @Nullable String original) implements Property<T> {
public @Nullable T orNull() {
return null;
Expand All @@ -178,6 +183,30 @@ public boolean parseBoolean(boolean fallback) {
}
return Boolean.parseBoolean(v);
}

}

public interface PropertyFunction<T extends @Nullable Object, R extends @Nullable Object, E extends Exception>
extends Function<T, R> {

@Override
default R apply(T t) {
try {
return _apply(t);
}
catch (Exception e) {
sneakyThrow(e);
throw new RuntimeException(e);
}
}

public R _apply(T t) throws E;

}

@SuppressWarnings("unchecked")
public static <E extends Throwable> void sneakyThrow(final Throwable x) throws E {
throw (E) x;
}

}
22 changes: 18 additions & 4 deletions core/src/main/java/io/jstach/rainbowgum/LogRouter.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.jstach.rainbowgum;

import java.lang.System.Logger.Level;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collections;
import java.util.IdentityHashMap;
Expand Down Expand Up @@ -146,7 +147,7 @@ default void log(LogEvent event) {
publisher().log(event);
}

public static Builder builder(LogConfig config) {
static Builder builder(LogConfig config) {
return new Builder(config);
}

Expand All @@ -167,6 +168,10 @@ protected Builder self() {
return this;
}

public LogConfig config() {
return this.config;
}

public Builder appender(Consumer<LogAppender.Builder> consumer) {
var builder = LogAppender.builder();
consumer.accept(builder);
Expand All @@ -188,17 +193,26 @@ Router build() {
var levelResolver = buildLevelResolver(config.levelResolver());
var publisher = this.publisher;
List<AppenderProvider> appenders = new ArrayList<>(this.appenders);
if (this.appenders.isEmpty()) {
if (appenders.isEmpty()) {
appenders.add(LogAppender.builder().output(LogOutput.ofStandardOut()).build());
Properties.of(config) //
.property("file") //
.map(URI::new)
.map(u -> config.outputProvider().of(u))
.map(o -> {
return LogAppender.builder().output(o).build();
}) //
.optional()
.ifPresent(appenders::add);
}
if (publisher == null) {
publisher = LogPublisher.SyncLogPublisher //
.builder() //
.build();
}

var apps = this.appenders.stream().map(a -> a.provide(config)).toList();
var pub = this.publisher.provide(config, apps);
var apps = appenders.stream().map(a -> a.provide(config)).toList();
var pub = publisher.provide(config, apps);

return new SimpleRoute(pub, levelResolver);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ public non-sealed interface RainbowGumProvider extends RainbowGumServiceProvider

Optional<RainbowGum> provide(LogConfig config);

public static RainbowGum defaults(LogConfig config) {
return RainbowGum.builder(config).route(r -> {

}).build();
}

}

private static <T extends RainbowGumServiceProvider> Stream<T> findProviders(
Expand Down
2 changes: 1 addition & 1 deletion core/src/test/java/io/jstach/rainbowgum/LogConfigTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class LogConfigTest {
void test() {
// System.setProperty("rainbowgum.log.stuff", "DEBUG");

var config = LogConfig.of(Map.<String, String>of("rainbowgum.log.stuff", "DEBUG")::get);
var config = LogConfig.of(Map.<String, String>of("logging.level.stuff", "DEBUG")::get);
var resolver = config.levelResolver();
var actual = resolver.resolveLevel("stuff");

Expand Down
7 changes: 2 additions & 5 deletions core/src/test/java/io/jstach/rainbowgum/RainbowGumTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,11 @@
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.lang.System.Logger.Level;
import java.util.List;
import java.util.Map;

import org.junit.jupiter.api.Test;

import io.jstach.rainbowgum.LogAppender.ThreadSafeLogAppender;
import io.jstach.rainbowgum.LogPublisher.PublisherProvider;
import io.jstach.rainbowgum.publisher.BlockingQueueAsyncLogPublisher;

class RainbowGumTest {

Expand All @@ -31,7 +28,7 @@ public void testBuilder() throws Exception {

@Test
public void testLevelConfig() throws Exception {
Map<String, String> config = Map.of("rainbowgum.log.stuff", "" + Level.DEBUG.name());
Map<String, String> config = Map.of("logging.level.stuff", "" + Level.DEBUG.name());
var gum = RainbowGum.builder(LogConfig.of(config::get)).build();

gum.router().log("stuff", Level.DEBUG, "Stuff");
Expand Down Expand Up @@ -76,7 +73,7 @@ void testFormatterBuilder() throws Exception {
try (var gum = RainbowGum.builder().route(r -> {
r.publisher(PublisherProvider.async().build());
r.appender(sysout);
r.level("stuff", Level.WARNING);
r.level(Level.WARNING, "stuff");
}).build()) {

gum.start();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class RainbowGumLoggerFactoryTest {
void testGetLogger() {
var list = new ListLogOutput();
var gum = RainbowGum.builder().route(route -> {
route.level("ignore", System.Logger.Level.WARNING);
route.level(System.Logger.Level.WARNING, "ignore");
route.level(System.Logger.Level.INFO);
route.appender(a -> {
a.formatter((output, event) -> {
Expand Down

0 comments on commit 9bb2024

Please sign in to comment.