From b9381755c140c1e82139fda0dccc1da32306eac7 Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Sun, 9 Mar 2025 16:06:49 +0700 Subject: [PATCH] refactor: rewrite logging stuff --- build-number.txt | 2 +- .../java/me/chayapak1/chomens_bot/Main.java | 10 +-- .../command/ConsoleCommandContext.java | 5 +- .../chomens_bot/data/logging/LogType.java | 19 +++++ .../chomens_bot/plugins/AuthPlugin.java | 7 +- .../chomens_bot/plugins/LoggerPlugin.java | 71 +++++++------------ .../chomens_bot/plugins/TrustedPlugin.java | 3 +- .../chomens_bot/util/FileLoggerUtilities.java | 15 ++-- .../chomens_bot/util/LoggerUtilities.java | 67 ++++++----------- 9 files changed, 89 insertions(+), 110 deletions(-) create mode 100644 src/main/java/me/chayapak1/chomens_bot/data/logging/LogType.java diff --git a/build-number.txt b/build-number.txt index a9958891..0504b068 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -1741 \ No newline at end of file +1748 \ No newline at end of file diff --git a/src/main/java/me/chayapak1/chomens_bot/Main.java b/src/main/java/me/chayapak1/chomens_bot/Main.java index 194759f1..0aeb1d5a 100644 --- a/src/main/java/me/chayapak1/chomens_bot/Main.java +++ b/src/main/java/me/chayapak1/chomens_bot/Main.java @@ -72,7 +72,7 @@ public class Main { configWriter.write(defaultConfig); configWriter.close(); - LoggerUtilities.info("config.yml file was not found, so the default one was created. Please modify it to your needs."); + LoggerUtilities.log("config.yml file was not found, so the default one was created. Please modify it to your needs."); System.exit(1); } @@ -104,12 +104,12 @@ public class Main { backupFailTimes++; if (backupFailTimes > config.backup.failTimes) { - LoggerUtilities.info("Main instance is down! Starting backup instance"); + LoggerUtilities.log("Main instance is down! Starting backup instance"); initializeBots(); } } else if (reachable && alreadyStarted) { - LoggerUtilities.info("Main instance is back up! Now stopping"); + LoggerUtilities.log("Main instance is back up! Now stopping"); // no need to reset backupFailTimes because we are stopping anyway @@ -137,7 +137,7 @@ public class Main { if (config.discord.enabled) discord = new DiscordPlugin(config); if (config.irc.enabled) new IRCPlugin(config); - LoggerUtilities.info("Initialized all bots. Now connecting"); + LoggerUtilities.log("Initialized all bots. Now connecting"); for (Bot bot : bots) bot.connect(); } catch (Exception e) { @@ -175,7 +175,7 @@ public class Main { reason != null ? reason : "No reason given" ); - LoggerUtilities.info(stoppingMessage); + LoggerUtilities.log(stoppingMessage); executor.shutdown(); diff --git a/src/main/java/me/chayapak1/chomens_bot/command/ConsoleCommandContext.java b/src/main/java/me/chayapak1/chomens_bot/command/ConsoleCommandContext.java index 4e4e95ff..02e3567f 100644 --- a/src/main/java/me/chayapak1/chomens_bot/command/ConsoleCommandContext.java +++ b/src/main/java/me/chayapak1/chomens_bot/command/ConsoleCommandContext.java @@ -1,7 +1,7 @@ package me.chayapak1.chomens_bot.command; import me.chayapak1.chomens_bot.Bot; -import me.chayapak1.chomens_bot.util.ComponentUtilities; +import me.chayapak1.chomens_bot.data.logging.LogType; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -15,8 +15,7 @@ public class ConsoleCommandContext extends CommandContext { @Override public void sendOutput (Component component) { - final String message = ComponentUtilities.stringifyAnsi(component); - bot.logger.info(message); + bot.logger.log(LogType.COMMAND_OUTPUT, component); } @Override diff --git a/src/main/java/me/chayapak1/chomens_bot/data/logging/LogType.java b/src/main/java/me/chayapak1/chomens_bot/data/logging/LogType.java new file mode 100644 index 00000000..0252b278 --- /dev/null +++ b/src/main/java/me/chayapak1/chomens_bot/data/logging/LogType.java @@ -0,0 +1,19 @@ +package me.chayapak1.chomens_bot.data.logging; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; + +public enum LogType { + INFO(Component.text("Info").color(NamedTextColor.GREEN)), + CHAT(Component.text("Chat").color(NamedTextColor.GOLD)), + TRUSTED_BROADCAST(Component.text("Trusted Broadcast").color(NamedTextColor.AQUA)), + ERROR(Component.text("Error").color(NamedTextColor.RED)), + COMMAND_OUTPUT(Component.text("Command Output").color(NamedTextColor.LIGHT_PURPLE)), + AUTH(Component.text("Auth").color(NamedTextColor.RED)); + + public final Component component; + + LogType (Component component) { + this.component = component; + } +} diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/AuthPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/AuthPlugin.java index de37d7ce..14cb82b2 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/AuthPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/AuthPlugin.java @@ -1,6 +1,7 @@ package me.chayapak1.chomens_bot.plugins; import me.chayapak1.chomens_bot.Bot; +import me.chayapak1.chomens_bot.data.logging.LogType; import me.chayapak1.chomens_bot.data.player.PlayerEntry; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -32,10 +33,8 @@ public class AuthPlugin extends PlayersPlugin.Listener { future.completeOnTimeout("", 10, TimeUnit.SECONDS); future.thenApplyAsync(ip -> { - bot.logger.custom( - Component - .text("Auth") - .color(NamedTextColor.RED), + bot.logger.log( + LogType.AUTH, Component.translatable( "Authenticating with user IP %s and configured owner IP %s", Component.text(ip), diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/LoggerPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/LoggerPlugin.java index b1a90839..9fff6291 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/LoggerPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/LoggerPlugin.java @@ -2,7 +2,8 @@ package me.chayapak1.chomens_bot.plugins; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.Main; -import me.chayapak1.chomens_bot.util.ComponentUtilities; +import me.chayapak1.chomens_bot.data.logging.LogType; +import me.chayapak1.chomens_bot.util.ExceptionUtilities; import me.chayapak1.chomens_bot.util.LoggerUtilities; import net.kyori.adventure.text.Component; import org.geysermc.mcprotocollib.network.event.session.ConnectedEvent; @@ -15,8 +16,6 @@ public class LoggerPlugin extends ChatPlugin.Listener { private final Bot bot; - private boolean addedListener = false; - public boolean logToConsole = true; private int totalConnects = 0; @@ -54,71 +53,49 @@ public class LoggerPlugin extends ChatPlugin.Listener { ); totalConnects = 0; - - if (addedListener) return; - bot.chat.addListener(LoggerPlugin.this); - addedListener = true; } @Override public void disconnected (DisconnectedEvent event) { if (totalConnects >= 20) return; - final Component reason = event.getReason(); + final Component message = Component.translatable( + "Disconnected from %s, reason: %s", + Component.text(bot.getServerString(true)), + event.getReason() + ); - final String message = "Disconnected from " + bot.getServerString(true) + ", reason: "; + log(message); + } - final String string = ComponentUtilities.stringify(reason); - - if (logToConsole) { - final String ansi = ComponentUtilities.stringifyAnsi(reason); - - log(message + ansi, false, true); - } - log(message + string, true, false); + @Override + public void loadedPlugins() { + bot.chat.addListener(LoggerPlugin.this); } }); bot.logger = this; } - public void log (String message) { - LoggerUtilities.log(bot, message, true, logToConsole); - } - public void log (String message, boolean logToFile, boolean logToConsole) { - LoggerUtilities.log(bot, message, logToFile, logToConsole); + public void log (LogType type, Component message) { + LoggerUtilities.log(type, bot, message, true, logToConsole); } - public void info (String message) { - if (!logToConsole) return; - - LoggerUtilities.info(bot, message); + public void log (LogType type, Component message, boolean logToFile) { + LoggerUtilities.log(type, bot, message, logToFile, logToConsole); } - public void error (Throwable throwable) { - if (!logToConsole) return; + public void log (Component message) { log(LogType.INFO, message); } + public void log (String message) { log(LogType.INFO, Component.text(message)); } + public void log (LogType type, String message) { log(type, Component.text(message)); } - LoggerUtilities.error(bot, throwable); - } - public void error (String message) { - if (!logToConsole) return; - - LoggerUtilities.error(bot, message); - } - - public void custom (Component prefix, Component message) { - if (!logToConsole) return; - - LoggerUtilities.custom(bot, prefix, message); - } + public void error (Component message) { log(LogType.ERROR, message); } + public void error (String message) { log(LogType.ERROR, Component.text(message)); } + public void error (Throwable throwable) { log(LogType.ERROR, ExceptionUtilities.getStacktrace(throwable)); } @Override - public boolean systemMessageReceived(Component component, String string, String ansi) { - if (logToConsole) { - log(ansi, false, true); - } - - log(string, true, false); + public boolean systemMessageReceived (Component component, String string, String ansi) { + log(LogType.CHAT, component); return true; } diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/TrustedPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/TrustedPlugin.java index 7af17ea6..8ee3a5a7 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/TrustedPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/TrustedPlugin.java @@ -1,6 +1,7 @@ package me.chayapak1.chomens_bot.plugins; import me.chayapak1.chomens_bot.Bot; +import me.chayapak1.chomens_bot.data.logging.LogType; import me.chayapak1.chomens_bot.data.player.PlayerEntry; import me.chayapak1.chomens_bot.util.ColorUtilities; import net.kyori.adventure.text.Component; @@ -35,7 +36,7 @@ public class TrustedPlugin extends PlayersPlugin.Listener { message.color(NamedTextColor.WHITE) ).color(NamedTextColor.DARK_GRAY); - bot.logger.custom(Component.text("Trusted Broadcast").color(NamedTextColor.AQUA), component); + bot.logger.log(LogType.TRUSTED_BROADCAST, component); for (String player : list) { final PlayerEntry entry = bot.players.getEntry(player); diff --git a/src/main/java/me/chayapak1/chomens_bot/util/FileLoggerUtilities.java b/src/main/java/me/chayapak1/chomens_bot/util/FileLoggerUtilities.java index 444ece3b..4fd931b9 100644 --- a/src/main/java/me/chayapak1/chomens_bot/util/FileLoggerUtilities.java +++ b/src/main/java/me/chayapak1/chomens_bot/util/FileLoggerUtilities.java @@ -28,7 +28,7 @@ public class FileLoggerUtilities { public static OutputStreamWriter logWriter; public static LocalDate currentLogDate; - public static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("'['dd/MM/yyyy HH:mm:ss']' "); + public static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss"); public static String prevEntry = ""; public static int duplicateCounter = 1; @@ -127,7 +127,7 @@ public class FileLoggerUtilities { return getLogDate(path).equals(date.toString()); } - public static synchronized void log(String str) { + public static synchronized void log(String type, String str) { if (freezeTime > System.currentTimeMillis()) { return; } @@ -161,7 +161,7 @@ public class FileLoggerUtilities { logWriter.write("\n"); } - logWriter.write(getTimePrefix() + str.replaceAll("\\[(\\d+?)x](?=$|[\r\n])", "[/$1x]")); // the replaceAll will prevent conflicts with the duplicate counter + logWriter.write(getPrefix(type) + str.replaceAll("\\[(\\d+?)x](?=$|[\r\n])", "[/$1x]")); // the replaceAll will prevent conflicts with the duplicate counter logWriter.flush(); duplicateCounter = 1; @@ -173,8 +173,13 @@ public class FileLoggerUtilities { LoggerUtilities.error(e); } } - public static String getTimePrefix() { + + public static String getPrefix(String type) { LocalDateTime dateTime = LocalDateTime.now(); - return dateTime.format(dateTimeFormatter); + return String.format( + "[%s %s] ", + dateTime.format(dateTimeFormatter), + type + ); } } diff --git a/src/main/java/me/chayapak1/chomens_bot/util/LoggerUtilities.java b/src/main/java/me/chayapak1/chomens_bot/util/LoggerUtilities.java index ddd1b18c..689f625d 100644 --- a/src/main/java/me/chayapak1/chomens_bot/util/LoggerUtilities.java +++ b/src/main/java/me/chayapak1/chomens_bot/util/LoggerUtilities.java @@ -2,6 +2,7 @@ package me.chayapak1.chomens_bot.util; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.Main; +import me.chayapak1.chomens_bot.data.logging.LogType; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -11,80 +12,58 @@ import java.time.format.DateTimeFormatter; public class LoggerUtilities { private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss"); - // function ported from chomens bot js (well, modified) - private static String prefix (Bot bot, Component prefix, String _message) { + private static Component getPrefix (Bot bot, Component prefix, Component message) { final LocalDateTime dateTime = LocalDateTime.now(); - Component message; + Component component; if (bot != null) { - message = Component.translatable( + component = Component.translatable( "[%s %s] [%s] [%s] %s", Component.text(dateTime.format(dateTimeFormatter)).color(NamedTextColor.GRAY), prefix, Component.text(Thread.currentThread().getName()).color(NamedTextColor.GRAY), Component.text(bot.options.serverName).color(NamedTextColor.GRAY), - Component.text(_message).color(NamedTextColor.WHITE) + Component.empty().append(message).color(NamedTextColor.WHITE) ).color(NamedTextColor.DARK_GRAY); } else { - message = Component.translatable( + component = Component.translatable( "[%s %s] [%s] %s", Component.text(dateTime.format(dateTimeFormatter)).color(NamedTextColor.GRAY), prefix, Component.text(Thread.currentThread().getName()).color(NamedTextColor.GRAY), - Component.text(_message).color(NamedTextColor.WHITE) + Component.empty().append(message).color(NamedTextColor.WHITE) ).color(NamedTextColor.DARK_GRAY); } - return ComponentUtilities.stringifyAnsi(message); + return component; } - public static void log (String message) { log(null, message, true, true); } - public static void log (Component message) { log(null, message); } - public static void log (Bot bot, Component message) { log(bot, ComponentUtilities.stringifyAnsi(message)); } - public static void log (Bot bot, String message) { log(bot, message, true, true); } - public static void log (Bot bot, String message, boolean logToFile, boolean logToConsole) { - final String component = prefix(bot, Component.text("Log").color(NamedTextColor.GOLD), message); + public static void log (String message) { log(LogType.INFO, null, Component.text(message), true, true); } + public static void log (Component message) { log(LogType.INFO, null, message, true, true); } + public static void log (LogType type, String message) { log(type, null, Component.text(message), true, true); } + public static void log (LogType type, Component message) { log(type, null, message, true, true); } + public static void log (Bot bot, Component message) { log(LogType.INFO, bot, message, true, true); } + public static void log (Bot bot, String message) { log(LogType.INFO, bot, Component.text(message), true, true); } + public static void log (LogType type, Bot bot, Component message, boolean logToFile, boolean logToConsole) { + final Component component = getPrefix(bot, type.component, message); - if (logToConsole) print(component); + if (logToConsole) print(ComponentUtilities.stringifyAnsi(component)); if (logToFile) { - final String formattedMessage = bot == null ? "" : + final String formattedMessage = bot == null ? ComponentUtilities.stringify(message) : String.format( "[%s] %s", bot.getServerString(true), - message + ComponentUtilities.stringify(message) ); - FileLoggerUtilities.log(formattedMessage); + FileLoggerUtilities.log(ComponentUtilities.stringify(type.component), formattedMessage); } } - public static void info (String message) { info(null, message); } - public static void info (Component message) { info(null, message); } - public static void info (Bot bot, Component message) { info(bot, ComponentUtilities.stringifyAnsi(message)); } - public static void info (Bot bot, String message) { - final String component = prefix(bot, Component.text("Info").color(NamedTextColor.GREEN), message); - - print(component); - } - - public static void error (String message) { error(null, message); } - public static void error (Component message) { error(null, message); } - public static void error (Throwable throwable) { error(null, throwable); } - public static void error (Bot bot, Component message) { error(bot, ComponentUtilities.stringifyAnsi(message)); } - public static void error (Bot bot, Throwable throwable) { error(bot, ExceptionUtilities.getStacktrace(throwable)); } - public static void error (Bot bot, String message) { - final String component = prefix(bot, Component.text("Error").color(NamedTextColor.RED), message); - - print(component); - } - - public static void custom (Component prefix, Component message) { custom(null, prefix, message); } - public static void custom (Bot bot, Component prefix, Component _message) { - final String message = prefix(bot, prefix, ComponentUtilities.stringifyAnsi(_message)); - - print(message); - } + public static void error (String message) { log(LogType.ERROR, message); } + public static void error (Component message) { log(LogType.ERROR, message); } + public static void error (Throwable throwable) { log(LogType.ERROR, ExceptionUtilities.getStacktrace(throwable)); } private static void print (String message) { if (Main.console == null) System.out.println(message);