diff --git a/build.gradle b/build.gradle index 8a5f28b..9986b99 100644 --- a/build.gradle +++ b/build.gradle @@ -23,6 +23,7 @@ repositories { dependencies { compileOnly "org.spigotmc:spigot-api:1.19.4-R0.1-SNAPSHOT" compileOnly 'com.comphenix.protocol:ProtocolLib:5.1.0' + compileOnly 'org.jetbrains:annotations:23.0.0' implementation ('cc.carm.lib:easysql-hikaricp:0.4.7') } diff --git a/src/main/java/top/redstarmc/plugin/redstarlib/RedStarLib.java b/src/main/java/top/redstarmc/plugin/redstarlib/RedStarLib.java index 647be46..ab39030 100644 --- a/src/main/java/top/redstarmc/plugin/redstarlib/RedStarLib.java +++ b/src/main/java/top/redstarmc/plugin/redstarlib/RedStarLib.java @@ -30,7 +30,7 @@ public void onEnable() { instance = this; loadManager(); - loggerManager.info("a"); + loggerManager.debugDataBase("a"); } @@ -44,7 +44,7 @@ public void loadManager() { configManager = new ImplConfigManager(); configManager.init(); - loggerManager = new ImplLoggerManager(INFO_PREFIX); + loggerManager = new ImplLoggerManager(INFO_PREFIX, true); serverManager = new ImplServerManager(INFO_PREFIX); } diff --git a/src/main/java/top/redstarmc/plugin/redstarlib/database/CustomDebugHandler.java b/src/main/java/top/redstarmc/plugin/redstarlib/database/CustomDebugHandler.java new file mode 100644 index 0000000..ec7c937 --- /dev/null +++ b/src/main/java/top/redstarmc/plugin/redstarlib/database/CustomDebugHandler.java @@ -0,0 +1,71 @@ +package top.redstarmc.plugin.redstarlib.database; + +import cc.carm.lib.easysql.api.SQLAction; +import cc.carm.lib.easysql.api.SQLQuery; +import cc.carm.lib.easysql.api.function.SQLDebugHandler; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import top.redstarmc.plugin.redstarlib.manager.LoggerManager; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + *

EasySQL 的 DebugHandler 预设模块

+ * 重写了该模块,以便通过插件输出。 + * 可直接使用本类,或继承后使用 + * {@link cc.carm.lib.easysql.api.SQLManager#setDebugHandler(SQLDebugHandler)} + * + * 将 "SQLDebugHandler" 替换为 "CustomDebugHandler" + */ +public abstract class CustomDebugHandler implements SQLDebugHandler { + + public CustomDebugHandler(LoggerManager loggerManager){ + this.loggerManager = loggerManager; + } + + LoggerManager loggerManager; + + @Override + public void beforeExecute(@NotNull SQLAction action, @NotNull List<@Nullable Object[]> params) { + loggerManager.debugDataBase("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"); + loggerManager.debugDataBase("┣# ActionUUID: {}", action.getActionUUID()); + loggerManager.debugDataBase("┣# ActionType: " + action.getClass().getSimpleName()); + if (action.getSQLContents().size() == 1) { + loggerManager.debugDataBase("┣# SQLContent: " + action.getSQLContents().get(0)); + } else { + loggerManager.debugDataBase("┣# SQLContents: "); + int i = 0; + for (String sqlContent : action.getSQLContents()) { + loggerManager.debugDataBase("┃ - [{}] {}", ++i, sqlContent); + } + } + if (params.size() == 1) { + Object[] param = params.get(0); + if (param != null) { + loggerManager.debugDataBase("┣# SQLParam: " + parseParams(param)); + } + } else if (params.size() > 1) { + loggerManager.debugDataBase("┣# SQLParams: "); + int i = 0; + for (Object[] param : params) { + loggerManager.debugDataBase("┃ - [{}] {}", ++i, parseParams(param)); + } + } + loggerManager.debugDataBase("┣# CreateTime: " + action.getCreateTime(TimeUnit.MILLISECONDS)); + loggerManager.debugDataBase("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"); + } + + @Override + public void afterQuery(@NotNull SQLQuery query, long executeNanoTime, long closeNanoTime) { + loggerManager.debugDataBase("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"); + loggerManager.debugDataBase("┣# ActionUUID: {}", query.getAction().getActionUUID()); + loggerManager.debugDataBase("┣# SQLContent: " + query.getSQLContent()); + loggerManager.debugDataBase("┣# CloseTime: {} (cost {} ms)", + TimeUnit.NANOSECONDS.toMillis(closeNanoTime), + ((double) (closeNanoTime - executeNanoTime) / 1000000) + ); + loggerManager.debugDataBase("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"); + } + +} diff --git a/src/main/java/top/redstarmc/plugin/redstarlib/impl/ImplLoggerManager.java b/src/main/java/top/redstarmc/plugin/redstarlib/impl/ImplLoggerManager.java index 9c1d483..daf6206 100644 --- a/src/main/java/top/redstarmc/plugin/redstarlib/impl/ImplLoggerManager.java +++ b/src/main/java/top/redstarmc/plugin/redstarlib/impl/ImplLoggerManager.java @@ -4,8 +4,7 @@ public class ImplLoggerManager extends LoggerManager { - - public ImplLoggerManager(String INFO_PREFIX) { - super(INFO_PREFIX); + public ImplLoggerManager(String INFO_PREFIX, boolean debugMode) { + super(INFO_PREFIX, debugMode); } } diff --git a/src/main/java/top/redstarmc/plugin/redstarlib/manager/ConfigurationManager.java b/src/main/java/top/redstarmc/plugin/redstarlib/manager/ConfigurationManager.java index e3155c1..749103a 100644 --- a/src/main/java/top/redstarmc/plugin/redstarlib/manager/ConfigurationManager.java +++ b/src/main/java/top/redstarmc/plugin/redstarlib/manager/ConfigurationManager.java @@ -36,7 +36,7 @@ public ConfigurationManager(ConfigurationManager manager){ } /** - *

初始化文件

+ *

创建文件

* 如果没有这个文件就自动创建,并返回 {@link YamlConfiguration} 配置文件,方便操作 * @return 读取到的 {@link YamlConfiguration} 配置文件 */ @@ -65,6 +65,11 @@ public void saveMapConfig(Map configMap){ save(); } + public void saveJarConfig(String fileName){ + + + } + /** *

从内存中保存 {@link YamlConfiguration} 格式文件

*/ diff --git a/src/main/java/top/redstarmc/plugin/redstarlib/manager/LoggerManager.java b/src/main/java/top/redstarmc/plugin/redstarlib/manager/LoggerManager.java index 7e50c5f..07cf65a 100644 --- a/src/main/java/top/redstarmc/plugin/redstarlib/manager/LoggerManager.java +++ b/src/main/java/top/redstarmc/plugin/redstarlib/manager/LoggerManager.java @@ -7,17 +7,19 @@ public abstract class LoggerManager { public String INFO_PREFIX; - public LoggerManager(String INFO_PREFIX) { + public boolean debugMode; + + public LoggerManager(String INFO_PREFIX, boolean debugMode) { this.INFO_PREFIX = INFO_PREFIX; + this.debugMode = debugMode; } - public boolean debugMode; /** *

发送插件普通信息

* @param messages 字符串 */ - public final void info(String... messages) { + public void info(String... messages) { if (messages == null) return; for (String message : messages) { if (message == null) continue; @@ -30,7 +32,7 @@ public final void info(String... messages) { * @param messages 字符串 * @param objects 传入的格式化内容 */ - public final void info(String messages,Object... objects) { + public void info(String messages, Object... objects) { if (messages == null) return; Bukkit.getConsoleSender().sendMessage(INFO_PREFIX + "§a[INFO] §r" + toStrings.format(messages,objects) + "§r"); } @@ -39,7 +41,7 @@ public final void info(String messages,Object... objects) { *

发送插件警告信息

* @param messages 字符串 */ - public final void warn(String... messages) { + public void warn(String... messages) { if (messages == null) return; for (String message : messages) { if (message == null) continue; @@ -51,7 +53,7 @@ public final void warn(String... messages) { *

发送插件错误信息

* @param messages 字符串 */ - public final void error(String... messages) { + public void error(String... messages) { if (messages == null) return; for (String message : messages) { if (message == null) continue; @@ -63,7 +65,7 @@ public final void error(String... messages) { *

发送插件debug信息

* @param messages 字符串 */ - public final void debug(String... messages) { + public void debug(String... messages) { if (messages == null) return; if (isDebugMode()) { for (String message : messages) { @@ -77,7 +79,7 @@ public final void debug(String... messages) { *

发送插件debug堆栈

* @param e 堆栈 */ - public final void debug(Throwable e) { + public void debug(Throwable e) { if (e == null) return; if (isDebugMode()) e.printStackTrace(); @@ -88,7 +90,7 @@ public final void debug(Throwable e) { * @param e 堆栈 * @param msg 字符串 */ - public final void debug(String msg, Throwable e) { + public void debug(String msg, Throwable e) { if (msg == null || e == null) return; if (isDebugMode()) { debug(msg); @@ -96,8 +98,32 @@ public final void debug(String msg, Throwable e) { } } + /** + *

发送插件 数据库 debug信息

+ * @param messages 字符串 + */ + public void debugDataBase(String messages, Object... objects) { + if (messages == null) return; + if (isDebugMode()) { + Bukkit.getConsoleSender().sendMessage(INFO_PREFIX + "§6[DEBUG DB] §r" + toStrings.format(messages,objects) + "§r"); + } + } - + /** + * 抛出错误堆栈和错误信息 + * @param throwable 堆栈 + * @param messages 信息 + */ + public void crash(Throwable throwable, String... messages){ + for (String message : messages) { + if (message == null) continue; + Bukkit.getConsoleSender().sendMessage(INFO_PREFIX + "§c[ERROR] §r" + message + "§r"); + } + Bukkit.getConsoleSender().sendMessage(INFO_PREFIX + "§c[ERROR] §r" + "抛出错误信息 ->" + "§r"); + Bukkit.getConsoleSender().sendMessage(INFO_PREFIX + "§c[ERROR] §r" + throwable.getMessage() + "§r"); + Bukkit.getConsoleSender().sendMessage(INFO_PREFIX + "§c[ERROR] §r" + "抛出错误堆栈 ->" + "§r"); + throwable.printStackTrace(); + } public String getINFO_PREFIX() { return INFO_PREFIX; diff --git a/src/main/java/top/redstarmc/plugin/redstarlib/utils/toStrings.java b/src/main/java/top/redstarmc/plugin/redstarlib/utils/toStrings.java index a525a40..d09f078 100644 --- a/src/main/java/top/redstarmc/plugin/redstarlib/utils/toStrings.java +++ b/src/main/java/top/redstarmc/plugin/redstarlib/utils/toStrings.java @@ -5,7 +5,7 @@ public class toStrings { /** - * 字符串按照 slf 方式进行格式化返回 + * 字符串按照 slf4j 方式进行格式化返回 * @return 格式化后的字符串 */ public static String format(String format, Object... params) {