Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 44 additions & 4 deletions rlib-logger-api/src/main/java/javasabr/rlib/logger/api/Logger.java
Original file line number Diff line number Diff line change
Expand Up @@ -431,26 +431,66 @@ default <A, B, C, D> void info(A arg1, B arg2, C arg3, D arg4, @NonNull N4Factor
}

/**
* Check of enabling the logger level.
* Checks whether logging is enabled at the specified level.
*
* @param level the log level
* @return true if logging is enabled, false otherwise
* @since 10.0.0
*/
default boolean enabled(@NonNull LoggerLevel level) {
return level.enabled();
}

/**
* Check of enabling the warning level.
* Checks whether logging is enabled at the error level.
*
* @return true if logging is enabled, false otherwise
* @since 10.0.0
*/
default boolean errorEnabled() {
return enabled(LoggerLevel.ERROR);
}

/**
* Checks whether logging is enabled at the warning level.
*
* @return true if logging is enabled, false otherwise
* @since 10.0.0
*/
default boolean warningEnabled() {
default boolean warnEnabled() {
return enabled(LoggerLevel.WARNING);
}

/**
* Check of enabling the debug level.
* Checks whether logging is enabled at the info level.
*
* @return true if logging is enabled, false otherwise
* @since 10.0.0
*/
default boolean infoEnabled() {
return enabled(LoggerLevel.INFO);
}

/**
* Checks whether logging is enabled at the debug level.
*
* @return true if logging is enabled, false otherwise
* @since 10.0.0
*/
default boolean debugEnabled() {
return enabled(LoggerLevel.DEBUG);
}

/**
* Checks whether logging is enabled at the trace level.
*
* @return true if logging is enabled, false otherwise
* @since 10.0.0
*/
default boolean traceEnabled() {
return enabled(LoggerLevel.TRACE);
}

/**
* Override the enabling status of the logger level.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class LoggerManager {

static {

String className = System.getProperty("com.ss.rlib.logger.factory", "");
String className = System.getProperty("javasabr.rlib.logger.factory", "");
Class<? extends LoggerFactory> implementation = null;

if (!className.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import javasabr.rlib.logger.api.Logger;
import javasabr.rlib.logger.api.LoggerLevel;
import javasabr.rlib.logger.api.LoggerService;
import javasabr.rlib.logger.impl.config.LogMessageConsumer;
import javasabr.rlib.logger.impl.config.consumer.LogMessageConsumer;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import org.jspecify.annotations.Nullable;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import javasabr.rlib.logger.api.Logger;
import javasabr.rlib.logger.api.LoggerFactory;
import javasabr.rlib.logger.api.LoggerService;
import javasabr.rlib.logger.impl.config.LoggerConfigResolver;
import javasabr.rlib.logger.impl.config.loader.LoggerConfigResolver;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import javasabr.rlib.logger.api.Logger;
import javasabr.rlib.logger.api.LoggerLevel;
import javasabr.rlib.logger.api.LoggerService;
import javasabr.rlib.logger.impl.config.LogMessageConsumer;
import javasabr.rlib.logger.impl.config.LoggerConfig;
import javasabr.rlib.logger.impl.config.consumer.LogMessageConsumer;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import javasabr.rlib.collections.array.UnsafeArray;
import javasabr.rlib.logger.api.Logger;
import javasabr.rlib.logger.api.LoggerLevel;
import javasabr.rlib.logger.impl.config.consumer.LogMessageConsumer;

/**
* Configuration contract for logger levels and message consumers.
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package javasabr.rlib.logger.impl.config;
package javasabr.rlib.logger.impl.config.consumer;

import javasabr.rlib.logger.api.Logger;
import javasabr.rlib.logger.api.LoggerLevel;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package javasabr.rlib.logger.impl.config.impl;
package javasabr.rlib.logger.impl.config.consumer.impl;

import javasabr.rlib.logger.api.Logger;
import javasabr.rlib.logger.api.LoggerLevel;
import javasabr.rlib.logger.impl.config.LogMessageConsumer;
import javasabr.rlib.logger.impl.config.LogMessageRender;
import javasabr.rlib.logger.impl.config.consumer.LogMessageConsumer;
import javasabr.rlib.logger.impl.config.render.LogMessageRender;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
@NullMarked
package javasabr.rlib.logger.impl.config.consumer.impl;

import org.jspecify.annotations.NullMarked;
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
@NullMarked
package javasabr.rlib.logger.impl.config.consumer;

import org.jspecify.annotations.NullMarked;
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
import javasabr.rlib.logger.api.Logger;
import javasabr.rlib.logger.api.LoggerLevel;
import javasabr.rlib.logger.impl.DefaultLoggerService;
import javasabr.rlib.logger.impl.config.LogMessageConsumer;
import javasabr.rlib.logger.impl.config.LoggerConfig;
import javasabr.rlib.logger.impl.config.consumer.LogMessageConsumer;

public class DefaultLoggerConfig implements LoggerConfig {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package javasabr.rlib.logger.impl.config.impl;

import javasabr.rlib.collections.array.Array;
import javasabr.rlib.collections.array.ArrayFactory;
import javasabr.rlib.collections.array.MutableArray;
import javasabr.rlib.collections.dictionary.DictionaryFactory;
import javasabr.rlib.collections.dictionary.MutableRefToRefDictionary;
import javasabr.rlib.logger.api.LoggerLevel;
import javasabr.rlib.logger.impl.config.LoggerConfig;
import javasabr.rlib.logger.impl.config.consumer.LogMessageConsumer;
import javasabr.rlib.logger.impl.config.impl.DefaultLoggerConfig.LoggerConsumersKey;
import javasabr.rlib.logger.impl.config.render.LogMessageRender;

public class LoggerConfigBuilder {

final MutableRefToRefDictionary<String, LoggerLevel> loggerLevels;
final MutableRefToRefDictionary<String, LogMessageRender> renders;
final MutableRefToRefDictionary<String, LogMessageConsumer> consumers;
final MutableRefToRefDictionary<LoggerConsumersKey, MutableArray<LogMessageConsumer>> loggerConsumers;

public LoggerConfigBuilder() {
this.loggerLevels = DictionaryFactory.mutableRefToRefDictionary();
this.renders = DictionaryFactory.mutableRefToRefDictionary();
this.consumers = DictionaryFactory.mutableRefToRefDictionary();
this.loggerConsumers = DictionaryFactory.mutableRefToRefDictionary();
Comment thread
JavaSaBr marked this conversation as resolved.
}
Comment thread
JavaSaBr marked this conversation as resolved.

public void registerLoggerLevel(String loggerName, LoggerLevel level) {
loggerLevels.put(loggerName, level);
}

public void registerLoggerConsumer(String loggerName, LoggerLevel level, LogMessageConsumer consumer) {
var key = new LoggerConsumersKey(loggerName, level);
loggerConsumers
.getOrCompute(key, () -> ArrayFactory.mutableArray(LogMessageConsumer.class))
.add(consumer);
}

public LoggerConfig build() {
var tempDictionary = DictionaryFactory
.<LoggerConsumersKey, Array<LogMessageConsumer>>mutableRefToRefDictionary();
loggerConsumers.forEach((key, consumers) ->
tempDictionary.put(key, Array.copyOf(consumers)));
return new DefaultLoggerConfig(loggerLevels.toReadOnly(), tempDictionary.toReadOnly());
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package javasabr.rlib.logger.impl.config;
package javasabr.rlib.logger.impl.config.loader;

import java.util.Optional;
import javasabr.rlib.logger.impl.config.LoggerConfig;

/**
* Loader of logger configuration.
Expand All @@ -9,6 +10,10 @@
*/
public interface LoggerConfigLoader {

int ORDER_NORMAL = 100;
int ORDER_LOW = 1000;
int ORDER_HIGH = 0;

/**
* Tries to load logger configuration.
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package javasabr.rlib.logger.impl.config.loader;

import javasabr.rlib.collections.array.Array;

/**
* Provider of additional logger configuration loaders.
*
* @since 10.0.0
*/
public interface LoggerConfigLoadersProvider {

/**
* Returns additional logger configuration loaders.
*
* @return the logger configuration loaders
* @since 10.0.0
*/
Array<LoggerConfigLoader> getLoggerConfigLoaders();
}
Comment thread
JavaSaBr marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package javasabr.rlib.logger.impl.config.loader;

import java.util.Comparator;
import java.util.Optional;
import java.util.ServiceLoader;
import javasabr.rlib.collections.array.Array;
import javasabr.rlib.collections.array.ArrayCollectors;
import javasabr.rlib.collections.array.ArrayFactory;
import javasabr.rlib.logger.impl.config.LoggerConfig;
import javasabr.rlib.logger.impl.config.loader.impl.DefaultLoggerConfigLoader;
import javasabr.rlib.logger.impl.config.loader.impl.PropertyLoggerConfigLoader;

/**
* Resolver of logger configuration from available loaders.
*
* @since 10.0.0
*/
public class LoggerConfigResolver {

private static final Array<LoggerConfigLoader> LOADERS;

static {
var registeredProviders = ArrayFactory.mutableArray(LoggerConfigLoader.class);
registeredProviders.add(new DefaultLoggerConfigLoader());
registeredProviders.add(new PropertyLoggerConfigLoader());
for (var provider : ServiceLoader.load(LoggerConfigLoadersProvider.class)) {
registeredProviders.addAll(provider.getLoggerConfigLoaders());
}
LOADERS = registeredProviders.stream()
.sorted(Comparator.comparingInt(LoggerConfigLoader::order))
.collect(ArrayCollectors.toArray(LoggerConfigLoader.class));
}

/**
* Loads logger configuration.
*
* @return the loaded logger configuration
* @since 10.0.0
*/
public static LoggerConfig load() {
return LOADERS
.stream()
.map(LoggerConfigLoader::tryToLoad)
.flatMap(Optional::stream)
.findFirst()
.orElseThrow();
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
package javasabr.rlib.logger.impl.config.impl;
package javasabr.rlib.logger.impl.config.loader.impl;

import java.util.Optional;
import javasabr.rlib.collections.array.Array;
import javasabr.rlib.collections.dictionary.RefToRefDictionary;
import javasabr.rlib.logger.api.LoggerLevel;
import javasabr.rlib.logger.impl.DefaultLoggerService;
import javasabr.rlib.logger.impl.config.LogMessageConsumer;
import javasabr.rlib.logger.impl.config.LoggerConfig;
import javasabr.rlib.logger.impl.config.LoggerConfigLoader;
import javasabr.rlib.logger.impl.config.consumer.LogMessageConsumer;
import javasabr.rlib.logger.impl.config.consumer.impl.ConsoleMessageConsumer;
import javasabr.rlib.logger.impl.config.impl.DefaultLoggerConfig;
import javasabr.rlib.logger.impl.config.impl.DefaultLoggerConfig.LoggerConsumersKey;
import javasabr.rlib.logger.impl.config.loader.LoggerConfigLoader;
import javasabr.rlib.logger.impl.config.render.impl.SimpleLogMessageRender;

public class DefaultLoggerConfigLoader implements LoggerConfigLoader {

Expand All @@ -17,11 +20,9 @@ public Optional<LoggerConfig> tryToLoad() {
RefToRefDictionary<String, LoggerLevel> loggerLevels = RefToRefDictionary.of(
DefaultLoggerService.ROOT_LOGGER_NAME,
LoggerLevel.INFO);

RefToRefDictionary<LoggerConsumersKey, Array<LogMessageConsumer>> loggerConsumers = RefToRefDictionary.of(
DefaultLoggerConfig.ROOT_INFO_CONSUMERS_KEY,
Array.of(new ConsoleMessageConsumer(new SimpleLogMessageRender())));

return Optional.of(new DefaultLoggerConfig(loggerLevels, loggerConsumers));
}

Expand Down
Loading
Loading