diff --git a/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/config/BlueMapConfigs.java b/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/config/BlueMapConfigs.java index c20f9c44..cb3db340 100644 --- a/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/config/BlueMapConfigs.java +++ b/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/config/BlueMapConfigs.java @@ -133,6 +133,8 @@ public class BlueMapConfigs implements BlueMapConfigProvider { .setVariable("data", formatPath(defaultDataFolder)) .setVariable("implementation", "bukkit") .setVariable("render-thread-count", Integer.toString(presetRenderThreadCount)) + .setVariable("logfile", formatPath(defaultDataFolder.resolve("logs").resolve("debug.log"))) + .setVariable("logfile-with-time", formatPath(defaultDataFolder.resolve("logs").resolve("debug_%1$tF_%1$tT.log"))) .build(), StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING ); diff --git a/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/config/CoreConfig.java b/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/config/CoreConfig.java index 6225b780..810e27e4 100644 --- a/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/config/CoreConfig.java +++ b/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/config/CoreConfig.java @@ -44,6 +44,8 @@ public class CoreConfig { private boolean scanForModResources = true; + private LogConfig log = new LogConfig(); + public boolean isAcceptDownload() { return acceptDownload; } @@ -69,4 +71,25 @@ public class CoreConfig { return scanForModResources; } + public LogConfig getLog() { + return log; + } + + @DebugDump + @ConfigSerializable + public static class LogConfig { + + private String file = null; + private boolean append = false; + + public String getFile() { + return file; + } + + public boolean isAppend() { + return append; + } + + } + } diff --git a/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/config/WebserverConfig.java b/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/config/WebserverConfig.java index c2f4e9d5..63a43d20 100644 --- a/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/config/WebserverConfig.java +++ b/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/config/WebserverConfig.java @@ -80,7 +80,7 @@ public class WebserverConfig { public static class LogConfig { private String file = null; - private boolean append = true; + private boolean append = false; private String format = "%1$s \"%3$s %4$s %5$s\" %6$s %7$s"; public String getFile() { diff --git a/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/plugin/Plugin.java b/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/plugin/Plugin.java index d444a727..411ad4c8 100644 --- a/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/plugin/Plugin.java +++ b/BlueMapCommon/src/main/java/de/bluecolored/bluemap/common/plugin/Plugin.java @@ -73,6 +73,8 @@ public class Plugin implements ServerEventListener { public static final String PLUGIN_ID = "bluemap"; public static final String PLUGIN_NAME = "BlueMap"; + private static final String DEBUG_FILE_LOG_NAME = "file-debug-log"; + private final InterruptableReentrantLock loadingLock = new InterruptableReentrantLock(); private final String implementationType; @@ -87,6 +89,7 @@ public class Plugin implements ServerEventListener { private RenderManager renderManager; private HttpServer webServer; + private Logger webLogger; private BlueMapAPIImpl api; @@ -124,6 +127,17 @@ public class Plugin implements ServerEventListener { WebappConfig webappConfig = getConfigs().getWebappConfig(); PluginConfig pluginConfig = getConfigs().getPluginConfig(); + //apply new file-logger config + if (coreConfig.getLog().getFile() != null) { + ZonedDateTime zdt = ZonedDateTime.ofInstant(Instant.now(), ZoneId.systemDefault()); + Logger.global.put(DEBUG_FILE_LOG_NAME, () -> Logger.file( + Path.of(String.format(coreConfig.getLog().getFile(), zdt)), + coreConfig.getLog().isAppend() + )); + } else { + Logger.global.remove(DEBUG_FILE_LOG_NAME); + } + //load plugin state try { GsonConfigurationLoader loader = GsonConfigurationLoader.builder() @@ -197,12 +211,13 @@ public class Plugin implements ServerEventListener { webserverConfig.getLog().isAppend() )); } + webLogger = Logger.combine(webLoggerList); try { webServer = new HttpServer(new LoggingRequestHandler( routingRequestHandler, webserverConfig.getLog().getFormat(), - Logger.combine(webLoggerList) + webLogger )); webServer.bind(new InetSocketAddress( webserverConfig.resolveIp(), @@ -409,6 +424,15 @@ public class Plugin implements ServerEventListener { webServer = null; } + if (webLogger != null) { + try { + webLogger.close(); + } catch (Exception ex) { + Logger.global.logError("Failed to close the webserver-logger!", ex); + } + webLogger = null; + } + //close bluemap if (blueMap != null) { try { @@ -419,6 +443,9 @@ public class Plugin implements ServerEventListener { } blueMap = null; + // remove file-logger + Logger.global.remove(DEBUG_FILE_LOG_NAME); + //clear resources worlds = null; maps = null; diff --git a/BlueMapCommon/src/main/resources/de/bluecolored/bluemap/config/core.conf b/BlueMapCommon/src/main/resources/de/bluecolored/bluemap/config/core.conf index bc9e5f0c..b7605fa2 100644 --- a/BlueMapCommon/src/main/resources/de/bluecolored/bluemap/config/core.conf +++ b/BlueMapCommon/src/main/resources/de/bluecolored/bluemap/config/core.conf @@ -32,4 +32,17 @@ ${metrics<< # An example report looks like this: {"implementation":"${implementation}","version":"${version}"} # Default is true metrics: true ->>} \ No newline at end of file +>>} +# Config-section for debug-logging +log: { + # The file where the debug-log will be written to. + # Comment out to disable debug-logging completely. + # Java String formatting syntax can be used to add time, see: https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html + # Default is no logging + file: "${logfile}" + #file: "${logfile-with-time}" + + # Whether the logger should append to an existing file, or overwrite it + # Default is false + append: false +} diff --git a/BlueMapCommon/src/main/resources/de/bluecolored/bluemap/config/webserver.conf b/BlueMapCommon/src/main/resources/de/bluecolored/bluemap/config/webserver.conf index 78c22d7c..0c580328 100644 --- a/BlueMapCommon/src/main/resources/de/bluecolored/bluemap/config/webserver.conf +++ b/BlueMapCommon/src/main/resources/de/bluecolored/bluemap/config/webserver.conf @@ -21,14 +21,14 @@ port: 8100 log: { # The file where all the webserver-activity will be logged to. # Comment out to disable the logging completely. - # Java String formatting syntax can be used to add time + # Java String formatting syntax can be used to add time, see: https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html # Default is no logging file: "${logfile}" #file: "${logfile-with-time}" # Whether the logger should append to an existing file, or overwrite it - # Default is true - append: true + # Default is false + append: false # The format of the webserver-acivity logs. # The syntax is the java String formatting, see: https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/JavaLogger.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/JavaLogger.java index a1d227d5..4671dce2 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/JavaLogger.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/JavaLogger.java @@ -24,6 +24,7 @@ */ package de.bluecolored.bluemap.core.logger; +import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.Logger; @@ -65,4 +66,10 @@ public class JavaLogger extends AbstractLogger { if (out.isLoggable(Level.FINE)) super.noFloodDebug(key, message); } + @Override + public void close() throws Exception { + for (Handler handler : out.getHandlers()) + handler.close(); + } + } diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/Logger.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/Logger.java index 5ae2c2e1..cd165778 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/Logger.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/Logger.java @@ -30,11 +30,20 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.logging.FileHandler; +import java.util.logging.Level; import java.util.stream.StreamSupport; -public abstract class Logger { +public abstract class Logger implements AutoCloseable { - public static Logger global = stdOut(); + @SuppressWarnings("StaticInitializerReferencesSubClass") + public static final MultiLogger global = new MultiLogger(stdOut()); + static { + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + try { + global.close(); + } catch (Exception ignore) {} + })); + } public void logError(Throwable throwable) { logError(throwable.getMessage(), throwable); @@ -103,6 +112,9 @@ public abstract class Logger { noFloodDebug(message, message); } + @Override + public void close() throws Exception {} + public abstract void clearNoFloodLog(); public abstract void removeNoFloodKey(String key); @@ -111,10 +123,13 @@ public abstract class Logger { removeNoFloodKey(message); } - public static Logger stdOut(){ + public static Logger stdOut() { return new PrintStreamLogger(System.out, System.err); } + public static Logger stdOut(boolean debug){ + return new PrintStreamLogger(System.out, System.err, debug); + } public static Logger file(Path path) throws IOException { return file(path, null); @@ -135,6 +150,7 @@ public abstract class Logger { fileHandler.setFormatter(format == null ? new LogFormatter() : new LogFormatter(format)); java.util.logging.Logger javaLogger = java.util.logging.Logger.getAnonymousLogger(); + javaLogger.setLevel(Level.ALL); javaLogger.setUseParentHandlers(false); javaLogger.addHandler(fileHandler); diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/LoggerLogger.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/LoggerLogger.java deleted file mode 100644 index 41744fc7..00000000 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/LoggerLogger.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * This file is part of BlueMap, licensed under the MIT License (MIT). - * - * Copyright (c) Blue (Lukas Rieger) - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package de.bluecolored.bluemap.core.logger; - -import org.apache.commons.io.FileUtils; -import org.apache.commons.lang3.exception.ExceptionUtils; - -import java.io.File; -import java.io.IOException; -import java.util.logging.Logger; -import java.util.logging.*; - -public class LoggerLogger extends AbstractLogger { - private static LoggerLogger instance = null; - - private Logger logger; - private SimpleFormatter formatter; - - private LoggerLogger() { - this.logger = Logger.getLogger("bluemap"); - this.logger.setUseParentHandlers(false); - ConsoleHandler cHandler = new ConsoleHandler(); - formatter = new SimpleFormatter() { - @Override - public synchronized String format(LogRecord record) { - String stackTrace = record.getThrown() == null ? "" : ExceptionUtils.getStackTrace(record.getThrown()); - return String.format("[%1$s] %2$s%3$s%n", record.getLevel(), record.getMessage(), stackTrace); - } - }; - cHandler.setFormatter(formatter); - this.logger.addHandler(cHandler); - - } - - public static LoggerLogger getInstance() { - if (instance == null) { - instance = new LoggerLogger(); - } - return instance; - } - - public void addFileHandler(String filename, boolean append) { - try { - File file = new File(filename); - FileUtils.forceMkdirParent(file); - FileHandler fHandler = new FileHandler(filename, append); - fHandler.setFormatter(formatter); - this.logger.addHandler(fHandler); - } catch (IOException e) { - de.bluecolored.bluemap.core.logger.Logger.global.logError("Error while opening log file!", e); - } - } - - @Override - public void logError(String message, Throwable throwable) { - logger.log(Level.SEVERE, message, throwable); - } - - @Override - public void logWarning(String message) { - logger.log(Level.WARNING, message); - } - - @Override - public void logInfo(String message) { - logger.log(Level.INFO, message); - } - - @Override - public void logDebug(String message) { - logger.log(Level.FINE, message); - } - -} diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/MultiLogger.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/MultiLogger.java index 4649b8ac..334f822a 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/MultiLogger.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/MultiLogger.java @@ -24,37 +24,124 @@ */ package de.bluecolored.bluemap.core.logger; -@SuppressWarnings("ForLoopReplaceableByForEach") +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.ReentrantReadWriteLock; + public class MultiLogger extends AbstractLogger { - private final Logger[] logger; + private static final AtomicInteger LOGGER_INDEX = new AtomicInteger(0); + + private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); + private final Map logger; public MultiLogger(Logger... logger) { - this.logger = logger; + this.logger = new HashMap<>(); + for (Logger l : logger) + put(l); + } + + public void put(Logger logger) { + put("anonymous-logger-" + LOGGER_INDEX.getAndIncrement(), () -> logger); + } + + public void put(String name, LoggerSupplier loggerSupplier) { + lock.writeLock().lock(); + try { + remove(name); //remove first so logger is closed + this.logger.put(name, loggerSupplier.get()); + } catch (Exception ex) { + logError("Failed to close Logger!", ex); + } finally { + lock.writeLock().unlock(); + } + } + + public void remove(String name) { + lock.writeLock().lock(); + try { + Logger removed = this.logger.remove(name); + if (removed != null) removed.close(); + } catch (Exception ex) { + logError("Failed to close Logger!", ex); + } finally { + lock.writeLock().unlock(); + } + } + + public void clear() { + lock.writeLock().lock(); + try { + String[] loggerNames = this.logger.keySet().toArray(String[]::new); + for (String name : loggerNames) + remove(name); + this.logger.clear(); + } finally { + lock.writeLock().unlock(); + } } @Override public void logError(String message, Throwable throwable) { - for (int i = 0; i < logger.length; i++) - logger[i].logError(message, throwable); + lock.readLock().lock(); + try { + for (Logger l : logger.values()) + l.logError(message, throwable); + } finally { + lock.readLock().unlock(); + } } @Override public void logWarning(String message) { - for (int i = 0; i < logger.length; i++) - logger[i].logWarning(message); + lock.readLock().lock(); + try { + for (Logger l : logger.values()) + l.logWarning(message); + } finally { + lock.readLock().unlock(); + } } @Override public void logInfo(String message) { - for (int i = 0; i < logger.length; i++) - logger[i].logInfo(message); + lock.readLock().lock(); + try { + for (Logger l : logger.values()) + l.logInfo(message); + } finally { + lock.readLock().unlock(); + } } @Override public void logDebug(String message) { - for (int i = 0; i < logger.length; i++) - logger[i].logDebug(message); + lock.readLock().lock(); + try { + for (Logger l : logger.values()) + l.logDebug(message); + } finally { + lock.readLock().unlock(); + } + } + + @Override + public void close() throws Exception { + lock.readLock().lock(); + try { + for (Logger l : logger.values()) + l.close(); + } finally { + lock.readLock().unlock(); + } + } + + @FunctionalInterface + public interface LoggerSupplier { + + Logger get() throws Exception; + } } diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/PrintStreamLogger.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/PrintStreamLogger.java index 4151e9c6..06f29a25 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/PrintStreamLogger.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/logger/PrintStreamLogger.java @@ -25,17 +25,20 @@ package de.bluecolored.bluemap.core.logger; import java.io.PrintStream; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; public class PrintStreamLogger extends AbstractLogger { - private PrintStream out, err; + private final PrintStream out, err; boolean isDebug; public PrintStreamLogger(PrintStream out, PrintStream err) { this.out = out; this.err = err; - this.isDebug = true; + this.isDebug = false; } public PrintStreamLogger(PrintStream out, PrintStream err, boolean debug) { @@ -54,23 +57,23 @@ public class PrintStreamLogger extends AbstractLogger { @Override public void logError(String message, Throwable throwable) { - err.println("[ERROR] " + message); + log(err, "ERROR", message); throwable.printStackTrace(err); } @Override public void logWarning(String message) { - out.println("[WARNING] " + message); + log(out, "WARNING", message); } @Override public void logInfo(String message) { - out.println("[INFO] " + message); + log(out, "INFO", message); } @Override public void logDebug(String message) { - if (isDebug) out.println("[DEBUG] " + message); + if (isDebug) log(out, "DEBUG", message); } @Override @@ -83,4 +86,9 @@ public class PrintStreamLogger extends AbstractLogger { if (isDebug) super.noFloodDebug(message); } + private void log(PrintStream stream, String level, String message) { + ZonedDateTime zdt = ZonedDateTime.ofInstant(Instant.now(), ZoneId.systemDefault()); + stream.printf("[%1$tT %2$s] %3$s%n", zdt, level, message); + } + } diff --git a/implementations/cli/src/main/java/de/bluecolored/bluemap/cli/BlueMapCLI.java b/implementations/cli/src/main/java/de/bluecolored/bluemap/cli/BlueMapCLI.java index 268edbe8..512ddba2 100644 --- a/implementations/cli/src/main/java/de/bluecolored/bluemap/cli/BlueMapCLI.java +++ b/implementations/cli/src/main/java/de/bluecolored/bluemap/cli/BlueMapCLI.java @@ -29,6 +29,7 @@ import de.bluecolored.bluemap.common.BlueMapService; import de.bluecolored.bluemap.common.MissingResourcesException; import de.bluecolored.bluemap.common.config.BlueMapConfigs; import de.bluecolored.bluemap.common.config.ConfigurationException; +import de.bluecolored.bluemap.common.config.CoreConfig; import de.bluecolored.bluemap.common.config.WebserverConfig; import de.bluecolored.bluemap.common.plugin.RegionFileWatchService; import de.bluecolored.bluemap.common.rendermanager.MapUpdateTask; @@ -44,7 +45,6 @@ import de.bluecolored.bluemap.common.web.http.HttpServer; import de.bluecolored.bluemap.core.BlueMap; import de.bluecolored.bluemap.core.MinecraftVersion; import de.bluecolored.bluemap.core.logger.Logger; -import de.bluecolored.bluemap.core.logger.LoggerLogger; import de.bluecolored.bluemap.core.map.BmMap; import de.bluecolored.bluemap.core.metrics.Metrics; import de.bluecolored.bluemap.core.storage.Storage; @@ -207,7 +207,7 @@ public class BlueMapCLI implements ServerInterface { } List webLoggerList = new ArrayList<>(); - if (verbose) webLoggerList.add(Logger.global); + if (verbose) webLoggerList.add(Logger.stdOut(true)); if (config.getLog().getFile() != null) { ZonedDateTime zdt = ZonedDateTime.ofInstant(Instant.now(), ZoneId.systemDefault()); webLoggerList.add(Logger.file( @@ -294,9 +294,13 @@ public class BlueMapCLI implements ServerInterface { try { CommandLine cmd = parser.parse(BlueMapCLI.createOptions(), args, false); + if (cmd.hasOption("b")) { + Logger.global.clear(); + Logger.global.put(Logger.stdOut(true)); + } + if (cmd.hasOption("l")) { - Logger.global = LoggerLogger.getInstance(); - ((LoggerLogger) Logger.global).addFileHandler(cmd.getOptionValue("l"), cmd.hasOption("a")); + Logger.global.put(Logger.file(Path.of(cmd.getOptionValue("l")), cmd.hasOption("a"))); } //help @@ -331,6 +335,17 @@ public class BlueMapCLI implements ServerInterface { } BlueMapConfigs configs = new BlueMapConfigs(cli, Path.of("data"), Path.of("web"), false); + + //apply new file-logger config + CoreConfig coreConfig = configs.getCoreConfig(); + if (coreConfig.getLog().getFile() != null) { + ZonedDateTime zdt = ZonedDateTime.ofInstant(Instant.now(), ZoneId.systemDefault()); + Logger.global.put(Logger.file( + Path.of(String.format(coreConfig.getLog().getFile(), zdt)), + coreConfig.getLog().isAppend() + )); + } + blueMap = new BlueMapService(cli, configs); boolean noActions = true; diff --git a/implementations/fabric-1.15.2/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java b/implementations/fabric-1.15.2/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java index 7eb61706..0dae60cd 100644 --- a/implementations/fabric-1.15.2/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java +++ b/implementations/fabric-1.15.2/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java @@ -66,7 +66,8 @@ public class FabricMod implements ModInitializer, ServerInterface { private final List onlinePlayerList; public FabricMod() { - Logger.global = new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME)); + Logger.global.clear(); + Logger.global.put(new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME))); this.onlinePlayerMap = new ConcurrentHashMap<>(); this.onlinePlayerList = Collections.synchronizedList(new ArrayList<>()); diff --git a/implementations/fabric-1.16.2/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java b/implementations/fabric-1.16.2/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java index 59dd4c65..6b8911bc 100644 --- a/implementations/fabric-1.16.2/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java +++ b/implementations/fabric-1.16.2/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java @@ -68,7 +68,8 @@ public class FabricMod implements ModInitializer, ServerInterface { private final List onlinePlayerList; public FabricMod() { - Logger.global = new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME)); + Logger.global.clear(); + Logger.global.put(new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME))); this.onlinePlayerMap = new ConcurrentHashMap<>(); this.onlinePlayerList = Collections.synchronizedList(new ArrayList<>()); diff --git a/implementations/fabric-1.17/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java b/implementations/fabric-1.17/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java index 7ca3c57f..c1c2b17d 100644 --- a/implementations/fabric-1.17/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java +++ b/implementations/fabric-1.17/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java @@ -68,7 +68,8 @@ public class FabricMod implements ModInitializer, ServerInterface { private final List onlinePlayerList; public FabricMod() { - Logger.global = new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME)); + Logger.global.clear(); + Logger.global.put(new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME))); this.onlinePlayerMap = new ConcurrentHashMap<>(); this.onlinePlayerList = Collections.synchronizedList(new ArrayList<>()); diff --git a/implementations/fabric-1.18/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java b/implementations/fabric-1.18/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java index 01164059..3ee871a7 100644 --- a/implementations/fabric-1.18/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java +++ b/implementations/fabric-1.18/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java @@ -68,7 +68,8 @@ public class FabricMod implements ModInitializer, ServerInterface { private final List onlinePlayerList; public FabricMod() { - Logger.global = new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME)); + Logger.global.clear(); + Logger.global.put(new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME))); this.onlinePlayerMap = new ConcurrentHashMap<>(); this.onlinePlayerList = Collections.synchronizedList(new ArrayList<>()); diff --git a/implementations/fabric-1.19.4/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java b/implementations/fabric-1.19.4/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java index bec0a9fe..a5e9d09b 100644 --- a/implementations/fabric-1.19.4/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java +++ b/implementations/fabric-1.19.4/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java @@ -69,7 +69,8 @@ public class FabricMod implements ModInitializer, ServerInterface { private final List onlinePlayerList; public FabricMod() { - Logger.global = new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME)); + Logger.global.clear(); + Logger.global.put(new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME))); this.onlinePlayerMap = new ConcurrentHashMap<>(); this.onlinePlayerList = Collections.synchronizedList(new ArrayList<>()); diff --git a/implementations/fabric-1.20/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java b/implementations/fabric-1.20/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java index b9584447..eeec61db 100644 --- a/implementations/fabric-1.20/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java +++ b/implementations/fabric-1.20/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java @@ -69,7 +69,8 @@ public class FabricMod implements ModInitializer, ServerInterface { private final List onlinePlayerList; public FabricMod() { - Logger.global = new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME)); + Logger.global.clear(); + Logger.global.put(new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME))); this.onlinePlayerMap = new ConcurrentHashMap<>(); this.onlinePlayerList = Collections.synchronizedList(new ArrayList<>()); diff --git a/implementations/folia/src/main/java/de/bluecolored/bluemap/bukkit/BukkitPlugin.java b/implementations/folia/src/main/java/de/bluecolored/bluemap/bukkit/BukkitPlugin.java index b9ab375f..5c4f5a29 100644 --- a/implementations/folia/src/main/java/de/bluecolored/bluemap/bukkit/BukkitPlugin.java +++ b/implementations/folia/src/main/java/de/bluecolored/bluemap/bukkit/BukkitPlugin.java @@ -73,7 +73,8 @@ public class BukkitPlugin extends JavaPlugin implements ServerInterface, Listene private final LoadingCache worlds; public BukkitPlugin() { - Logger.global = new JavaLogger(getLogger()); + Logger.global.clear(); + Logger.global.put(new JavaLogger(getLogger())); //try to get best matching minecraft-version MinecraftVersion version = MinecraftVersion.LATEST_SUPPORTED; diff --git a/implementations/forge-1.16.5/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java b/implementations/forge-1.16.5/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java index ceab5ee2..859b70a1 100644 --- a/implementations/forge-1.16.5/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java +++ b/implementations/forge-1.16.5/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java @@ -77,7 +77,8 @@ public class ForgeMod implements ServerInterface { private final List onlinePlayerList; public ForgeMod() { - Logger.global = new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME)); + Logger.global.clear(); + Logger.global.put(new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME))); this.onlinePlayerMap = new ConcurrentHashMap<>(); this.onlinePlayerList = Collections.synchronizedList(new ArrayList<>()); diff --git a/implementations/forge-1.17.1/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java b/implementations/forge-1.17.1/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java index 2d225c52..f50a19e9 100644 --- a/implementations/forge-1.17.1/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java +++ b/implementations/forge-1.17.1/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java @@ -76,7 +76,8 @@ public class ForgeMod implements ServerInterface { private final List onlinePlayerList; public ForgeMod() { - Logger.global = new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME)); + Logger.global.clear(); + Logger.global.put(new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME))); this.onlinePlayerMap = new ConcurrentHashMap<>(); this.onlinePlayerList = Collections.synchronizedList(new ArrayList<>()); diff --git a/implementations/forge-1.18.1/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java b/implementations/forge-1.18.1/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java index 8cb2ed34..112f6610 100644 --- a/implementations/forge-1.18.1/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java +++ b/implementations/forge-1.18.1/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java @@ -76,7 +76,8 @@ public class ForgeMod implements ServerInterface { private final List onlinePlayerList; public ForgeMod() { - Logger.global = new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME)); + Logger.global.clear(); + Logger.global.put(new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME))); this.onlinePlayerMap = new ConcurrentHashMap<>(); this.onlinePlayerList = Collections.synchronizedList(new ArrayList<>()); diff --git a/implementations/forge-1.19.4/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java b/implementations/forge-1.19.4/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java index 4f54cb51..03e315f7 100644 --- a/implementations/forge-1.19.4/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java +++ b/implementations/forge-1.19.4/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java @@ -77,7 +77,8 @@ public class ForgeMod implements ServerInterface { private final List onlinePlayerList; public ForgeMod() { - Logger.global = new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME)); + Logger.global.clear(); + Logger.global.put(new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME))); this.onlinePlayerMap = new ConcurrentHashMap<>(); this.onlinePlayerList = Collections.synchronizedList(new ArrayList<>()); diff --git a/implementations/forge-1.20/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java b/implementations/forge-1.20/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java index c3f93e10..d9386d3e 100644 --- a/implementations/forge-1.20/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java +++ b/implementations/forge-1.20/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java @@ -77,7 +77,8 @@ public class ForgeMod implements ServerInterface { private final List onlinePlayerList; public ForgeMod() { - Logger.global = new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME)); + Logger.global.clear(); + Logger.global.put(new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME))); this.onlinePlayerMap = new ConcurrentHashMap<>(); this.onlinePlayerList = Collections.synchronizedList(new ArrayList<>()); diff --git a/implementations/spigot/src/main/java/de/bluecolored/bluemap/bukkit/BukkitPlugin.java b/implementations/spigot/src/main/java/de/bluecolored/bluemap/bukkit/BukkitPlugin.java index 756e1aae..ef2cd30b 100644 --- a/implementations/spigot/src/main/java/de/bluecolored/bluemap/bukkit/BukkitPlugin.java +++ b/implementations/spigot/src/main/java/de/bluecolored/bluemap/bukkit/BukkitPlugin.java @@ -71,7 +71,8 @@ public class BukkitPlugin extends JavaPlugin implements ServerInterface, Listene private final LoadingCache worlds; public BukkitPlugin() { - Logger.global = new JavaLogger(getLogger()); + Logger.global.clear(); + Logger.global.put(new JavaLogger(getLogger())); //try to get best matching minecraft-version MinecraftVersion version = MinecraftVersion.LATEST_SUPPORTED; diff --git a/implementations/sponge-8.0.0/src/main/java/de/bluecolored/bluemap/sponge/SpongePlugin.java b/implementations/sponge-8.0.0/src/main/java/de/bluecolored/bluemap/sponge/SpongePlugin.java index 077adfb6..fff14541 100644 --- a/implementations/sponge-8.0.0/src/main/java/de/bluecolored/bluemap/sponge/SpongePlugin.java +++ b/implementations/sponge-8.0.0/src/main/java/de/bluecolored/bluemap/sponge/SpongePlugin.java @@ -91,7 +91,9 @@ public class SpongePlugin implements ServerInterface { @Inject public SpongePlugin(org.apache.logging.log4j.Logger logger, PluginContainer pluginContainer/*, Metrics.Factory metricsFactory*/) { - Logger.global = new Log4J2Logger(logger); + Logger.global.clear(); + Logger.global.put(new Log4J2Logger(logger)); + this.pluginContainer = pluginContainer; this.onlinePlayerMap = new ConcurrentHashMap<>(); diff --git a/implementations/sponge-9.0.0/src/main/java/de/bluecolored/bluemap/sponge/SpongePlugin.java b/implementations/sponge-9.0.0/src/main/java/de/bluecolored/bluemap/sponge/SpongePlugin.java index 077adfb6..fff14541 100644 --- a/implementations/sponge-9.0.0/src/main/java/de/bluecolored/bluemap/sponge/SpongePlugin.java +++ b/implementations/sponge-9.0.0/src/main/java/de/bluecolored/bluemap/sponge/SpongePlugin.java @@ -91,7 +91,9 @@ public class SpongePlugin implements ServerInterface { @Inject public SpongePlugin(org.apache.logging.log4j.Logger logger, PluginContainer pluginContainer/*, Metrics.Factory metricsFactory*/) { - Logger.global = new Log4J2Logger(logger); + Logger.global.clear(); + Logger.global.put(new Log4J2Logger(logger)); + this.pluginContainer = pluginContainer; this.onlinePlayerMap = new ConcurrentHashMap<>();