#1874 Introduce individual ConsoleLogger instance per class (#1875)

* #1874 Introduce individual ConsoleLogger instance per class
- Create ConsoleLoggerFactory from which a separate logger can be created for each class
- Allows to support individual log level settings in the future

* Fix CodeStyle issue

* Replace full class name with import

* Update usages after merge from master
This commit is contained in:
ljacqu
2019-08-06 15:15:16 +02:00
committed by Gabriele C
parent 254d4d75a2
commit c34f00f759
98 changed files with 853 additions and 387 deletions
@@ -0,0 +1,51 @@
package fr.xephi.authme.output;
import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.settings.Settings;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* Creates and keeps track of {@link ConsoleLogger} instances.
*/
public final class ConsoleLoggerFactory {
private static final Map<String, ConsoleLogger> consoleLoggers = new ConcurrentHashMap<>();
private static Settings settings;
private ConsoleLoggerFactory() {
}
/**
* Creates or returns the already existing logger associated with the given class.
*
* @param owningClass the class whose logger should be retrieved
* @return logger for the given class
*/
public static ConsoleLogger get(Class<?> owningClass) {
String name = owningClass.getCanonicalName();
return consoleLoggers.computeIfAbsent(name, ConsoleLoggerFactory::createLogger);
}
/**
* Sets up all loggers according to the properties returned by the settings instance.
*
* @param settings the settings instance
*/
public static void reloadSettings(Settings settings) {
ConsoleLoggerFactory.settings = settings;
ConsoleLogger.initializeSharedSettings(settings);
consoleLoggers.values()
.forEach(logger -> logger.initializeSettings(settings));
}
private static ConsoleLogger createLogger(String name) {
ConsoleLogger logger = new ConsoleLogger(name);
if (settings != null) {
logger.initializeSettings(settings);
}
return logger;
}
}