From 14704cbeef09d5fbdbdf08925d9ee630ab262e53 Mon Sep 17 00:00:00 2001 From: topi-banana Date: Fri, 24 Jan 2025 02:10:42 +0900 Subject: [PATCH] feat: chat & console logger --- docs/config.md | 11 +- src/main/java/com/vulpeus/kyoyu/Kyoyu.java | 7 +- .../java/com/vulpeus/kyoyu/KyoyuConfig.java | 47 ++++---- .../java/com/vulpeus/kyoyu/KyoyuLogger.java | 100 ++++++++++++++++++ .../kyoyu/client/gui/Explorer_WidgetList.java | 2 +- src/main/resources/assets/kyoyu/kyoyu.json | 3 +- 6 files changed, 144 insertions(+), 26 deletions(-) create mode 100644 src/main/java/com/vulpeus/kyoyu/KyoyuLogger.java diff --git a/docs/config.md b/docs/config.md index b36fea0..6ccecba 100644 --- a/docs/config.md +++ b/docs/config.md @@ -1,5 +1,14 @@ -- `logLevel` +- `logLevel_chat` + + Changes the log output level. + + Type: `String` (case-insensitive) + + Allow: [`info`, `off`, `debug`, `error`, `warn`, `all`] + + +- `consoleLogLevel` Changes the log output level. diff --git a/src/main/java/com/vulpeus/kyoyu/Kyoyu.java b/src/main/java/com/vulpeus/kyoyu/Kyoyu.java index 3f95c3c..8efbaa4 100644 --- a/src/main/java/com/vulpeus/kyoyu/Kyoyu.java +++ b/src/main/java/com/vulpeus/kyoyu/Kyoyu.java @@ -3,8 +3,6 @@ import com.vulpeus.kyoyu.placement.KyoyuPlacement; import net.minecraft.server.level.ServerPlayer; import org.apache.commons.io.FileUtils; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import java.io.File; import java.io.IOException; @@ -20,7 +18,7 @@ public class Kyoyu { public static final String MOD_ID = "kyoyu"; public static final String MOD_VERSION = /*$ mod_version*/ "unknown"; - public static final Logger LOGGER = LogManager.getLogger(MOD_ID); + public static final KyoyuLogger LOGGER = new KyoyuLogger(); public static KyoyuConfig CONFIG = null; @@ -49,7 +47,8 @@ public static void loadConfig() { } String json = new String(Files.readAllBytes(configFile), StandardCharsets.UTF_8); CONFIG = KyoyuConfig.fromJson(json); - CONFIG.setLogLevel(); + LOGGER.setChatLevel(CONFIG.chatLogLevel()); + LOGGER.setConsoleLevel(CONFIG.consoleLogLevel()); } catch (IOException e) { LOGGER.error("cannot read config"); LOGGER.error(e); diff --git a/src/main/java/com/vulpeus/kyoyu/KyoyuConfig.java b/src/main/java/com/vulpeus/kyoyu/KyoyuConfig.java index 561eae2..a2db9ca 100644 --- a/src/main/java/com/vulpeus/kyoyu/KyoyuConfig.java +++ b/src/main/java/com/vulpeus/kyoyu/KyoyuConfig.java @@ -2,39 +2,48 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.core.config.Configurator; import java.util.ArrayList; import java.util.List; public class KyoyuConfig { - private final String logLevel = "info"; + private final String logLevel_chat; + private final String logLevel_console; - private final String modify = "blacklist"; - private final List modify_whitelist = new ArrayList<>(); - private final List modify_blacklist = new ArrayList<>(); + private final String modify; + private final List modify_whitelist; + private final List modify_blacklist; - private final String remove = "blacklist"; - private final List remove_whitelist = new ArrayList<>(); - private final List remove_blacklist = new ArrayList<>(); + private final String remove; + private final List remove_whitelist; + private final List remove_blacklist; + + public KyoyuConfig() { + this.logLevel_chat = "info"; + this.logLevel_console = "info"; + + this.modify = "blacklist"; + this.modify_whitelist = new ArrayList<>(); + this.modify_blacklist = new ArrayList<>(); + + this.remove = "blacklist"; + this.remove_whitelist = new ArrayList<>(); + this.remove_blacklist = new ArrayList<>(); + } + + public KyoyuLogger.Level chatLogLevel() { + return KyoyuLogger.Level.fromString(logLevel_chat); + } + public KyoyuLogger.Level consoleLogLevel() { + return KyoyuLogger.Level.fromString(logLevel_console); + } public static KyoyuConfig fromJson(String json) { Gson gson = new Gson(); return gson.fromJson(json, KyoyuConfig.class); } - public void setLogLevel() { - String log_level = this.logLevel.toUpperCase(); - if (log_level.equals("OFF")) Configurator.setLevel(Kyoyu.MOD_ID, Level.OFF); - if (log_level.equals("INFO")) Configurator.setLevel(Kyoyu.MOD_ID, Level.INFO); - if (log_level.equals("DEBUG")) Configurator.setLevel(Kyoyu.MOD_ID, Level.DEBUG); - if (log_level.equals("ERROR")) Configurator.setLevel(Kyoyu.MOD_ID, Level.ERROR); - if (log_level.equals("WARN")) Configurator.setLevel(Kyoyu.MOD_ID, Level.WARN); - if (log_level.equals("ALL")) Configurator.setLevel(Kyoyu.MOD_ID, Level.ALL); - } - private boolean containsCaseInsensitive(List list, String value) { for (String otherValue: list) { if (value.equalsIgnoreCase(otherValue)) return true; diff --git a/src/main/java/com/vulpeus/kyoyu/KyoyuLogger.java b/src/main/java/com/vulpeus/kyoyu/KyoyuLogger.java new file mode 100644 index 0000000..35d38d6 --- /dev/null +++ b/src/main/java/com/vulpeus/kyoyu/KyoyuLogger.java @@ -0,0 +1,100 @@ +package com.vulpeus.kyoyu; + +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.message.ParameterizedMessage; + +public class KyoyuLogger { + private final String prefix; + private Level chatLevel; + private Level consoleLevel; + + private final Logger logger = LogManager.getLogger(Kyoyu.MOD_ID); + + public KyoyuLogger() { + this.prefix = "Kyoyu"; + this.chatLevel = Level.INFO; + this.consoleLevel = Level.INFO; + } + public void info(Object obj) { + error("{}", obj); + } + public void info(String fmt, Object... objects) { + log(Level.INFO, fmt, objects); + } + + public void warn(Object obj) { + error("{}", obj); + } + public void warn(String fmt, Object... objects) { + log(Level.WARN, fmt, objects); + } + + public void debug(Object obj) { + error("{}", obj); + } + public void debug(String fmt, Object... objects) { + log(Level.DEBUG, fmt, objects); + } + + public void error(Object obj) { + error("{}", obj); + } + public void error(String fmt, Object... objects) { + log(Level.ERROR, fmt, objects); + } + + private void log(Level level, String fmt, Object... objects) { + String message = format(fmt, objects); + if (shouldLog(level, this.chatLevel)) { + for (ServerPlayer serverPlayer: Kyoyu.PLAYERS) { + serverPlayer.sendSystemMessage(Component.empty().append(message)); + } + } + if (shouldLog(level, this.consoleLevel)) { + logger.info("[{}] {} : {}", this.prefix, level.level, message); + } + } + private boolean shouldLog(Level messageLevel, Level configuredLevel) { + if (configuredLevel == Level.OFF) return false; + if (configuredLevel == Level.ALL) return true; + return messageLevel.ordinal() >= configuredLevel.ordinal(); + } + + private String format(String formatter, Object[] objects) { + return ParameterizedMessage.format(formatter, objects); + } + + public void setChatLevel(Level level) { + this.chatLevel = level; + } + public void setConsoleLevel(Level level) { + this.consoleLevel = level; + } + + public enum Level { + ALL("all"), + DEBUG("debug"), + INFO("info"), + WARN("warn"), + ERROR("error"), + OFF("off"); + + private final String level; + + Level(String str) { + this.level = str.toUpperCase(); + } + + public static Level fromString(String str) { + if (str.equalsIgnoreCase("all")) return Level.ALL; + if (str.equalsIgnoreCase("debug")) return Level.DEBUG; + if (str.equalsIgnoreCase("info")) return Level.INFO; + if (str.equalsIgnoreCase("warn")) return Level.WARN; + if (str.equalsIgnoreCase("error")) return Level.ERROR; + return Level.OFF; + } + } +} diff --git a/src/main/java/com/vulpeus/kyoyu/client/gui/Explorer_WidgetList.java b/src/main/java/com/vulpeus/kyoyu/client/gui/Explorer_WidgetList.java index a344a66..da03d88 100644 --- a/src/main/java/com/vulpeus/kyoyu/client/gui/Explorer_WidgetList.java +++ b/src/main/java/com/vulpeus/kyoyu/client/gui/Explorer_WidgetList.java @@ -25,7 +25,7 @@ public Explorer_WidgetList(int x, int y, int width, int height, ISelectionListen super(x, y, width, height, selectionListener); this.browserEntryHeight = 22; this.kyoyuPlacement = kyoyuPlacement; - Kyoyu.LOGGER.info("{}", getAllEntries()); + Kyoyu.LOGGER.info(getAllEntries()); setSize(width, height); } diff --git a/src/main/resources/assets/kyoyu/kyoyu.json b/src/main/resources/assets/kyoyu/kyoyu.json index 77c052c..cbd6b20 100644 --- a/src/main/resources/assets/kyoyu/kyoyu.json +++ b/src/main/resources/assets/kyoyu/kyoyu.json @@ -1,5 +1,6 @@ { - "logLevel": "info", + "logLevel_chat": "info", + "logLevel_console": "info", "modify": "blacklist", "modify_whitelist": [],