From be7a0773673c754bc42cbac1d95cf1122f5f3690 Mon Sep 17 00:00:00 2001 From: TomTheFurry Date: Sun, 1 May 2022 13:14:29 +0800 Subject: [PATCH] Improved throwable logging for two custom logger --- .../lod/core/logging/ConfigBasedLogger.java | 18 +++++++++++++- .../core/logging/ConfigBasedSpamLogger.java | 24 +++++++++++++++---- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/seibel/lod/core/logging/ConfigBasedLogger.java b/src/main/java/com/seibel/lod/core/logging/ConfigBasedLogger.java index d45b71e1e..7b0da0700 100644 --- a/src/main/java/com/seibel/lod/core/logging/ConfigBasedLogger.java +++ b/src/main/java/com/seibel/lod/core/logging/ConfigBasedLogger.java @@ -52,6 +52,21 @@ public class ConfigBasedLogger { this.logger = logger; loggers.add(new WeakReference<>(this)); } + + private String _throwableToDetailString(Throwable t) { + StringBuilder sb = new StringBuilder(); + sb.append(t.toString()).append('\n'); + StackTraceElement[] stacks = t.getStackTrace(); + + if (stacks==null || stacks.length == 0) + return sb.append(" at {Stack trace unavailable}").toString(); + + for (StackTraceElement stack : stacks) { + sb.append(" at ").append(stack.toString()).append("\n"); + } + return sb.toString(); + } + public void update() { mode = getter.get(); } @@ -69,7 +84,8 @@ public class ConfigBasedLogger { } if (mode.levelForChat.isLessSpecificThan(level)) { if (param.length > 0 && param[param.length-1] instanceof Throwable) - ClientApi.logToChat(level, msgStr + "\nat\n" + Arrays.toString(((Throwable) param[param.length - 1]).getStackTrace())); + ClientApi.logToChat(level, msgStr + "\n" + + _throwableToDetailString(((Throwable) param[param.length - 1]))); else ClientApi.logToChat(level, msgStr); } } diff --git a/src/main/java/com/seibel/lod/core/logging/ConfigBasedSpamLogger.java b/src/main/java/com/seibel/lod/core/logging/ConfigBasedSpamLogger.java index b3d09e368..9f5af1b4a 100644 --- a/src/main/java/com/seibel/lod/core/logging/ConfigBasedSpamLogger.java +++ b/src/main/java/com/seibel/lod/core/logging/ConfigBasedSpamLogger.java @@ -64,6 +64,20 @@ public class ConfigBasedSpamLogger { mode = getter.get(); } + private String _throwableToDetailString(Throwable t) { + StringBuilder sb = new StringBuilder(); + sb.append(t.toString()).append('\n'); + StackTraceElement[] stacks = t.getStackTrace(); + + if (stacks==null || stacks.length == 0) + return sb.append(" at {Stack trace unavailable}").toString(); + + for (StackTraceElement stack : stacks) { + sb.append(" at ").append(stack.toString()).append("\n"); + } + return sb.toString(); + } + public void log(Level level, String str, Object... param) { if (logTries.get() >= maxLogCount) return; @@ -76,8 +90,9 @@ public class ConfigBasedSpamLogger { else logger.log(logLevel, msgStr); } if (mode.levelForChat.isLessSpecificThan(level)) { - if (param.length > 0 && param[param.length - 1] instanceof Throwable) - ClientApi.logToChat(level, msgStr + "\nat\n" + Arrays.toString(((Throwable) param[param.length - 1]).getStackTrace())); + if (param.length > 0 && param[param.length-1] instanceof Throwable) + ClientApi.logToChat(level, msgStr + "\n" + + _throwableToDetailString(((Throwable) param[param.length - 1]))); else ClientApi.logToChat(level, msgStr); } } @@ -114,8 +129,9 @@ public class ConfigBasedSpamLogger { else logger.log(logLevel, msgStr); } if (mode.levelForChat.isLessSpecificThan(level)) { - if (param.length > 0 && param[param.length - 1] instanceof Throwable) - ClientApi.logToChat(level, msgStr + "\nat\n" + Arrays.toString(((Throwable) param[param.length - 1]).getStackTrace())); + if (param.length > 0 && param[param.length-1] instanceof Throwable) + ClientApi.logToChat(level, msgStr + "\n" + + _throwableToDetailString(((Throwable) param[param.length - 1]))); else ClientApi.logToChat(level, msgStr); } }