feat: 完成 SimpleLogger

This commit is contained in:
2024-07-06 13:31:29 +08:00
parent a0ae6ec550
commit b6e6641041
20 changed files with 338 additions and 308 deletions

View File

@@ -11,11 +11,13 @@ import cn.hamster3.mc.plugin.core.bukkit.listener.CallbackListener;
import cn.hamster3.mc.plugin.core.bukkit.listener.DebugListener;
import cn.hamster3.mc.plugin.core.bukkit.page.handler.PageHandler;
import cn.hamster3.mc.plugin.core.bukkit.page.listener.PageListener;
import cn.hamster3.mc.plugin.core.bukkit.util.BukkitSimpleLogger;
import cn.hamster3.mc.plugin.core.bukkit.util.MinecraftVersion;
import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.config.ConfigSection;
import cn.hamster3.mc.plugin.core.common.config.YamlConfig;
import cn.hamster3.mc.plugin.core.common.util.UpdateCheckUtils;
import com.zaxxer.hikari.HikariDataSource;
import lombok.Getter;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import org.bukkit.Bukkit;
@@ -34,12 +36,13 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.logging.Level;
import java.util.logging.Logger;
public class HamsterCorePlugin extends JavaPlugin {
@Getter
private static HamsterCorePlugin instance;
@Getter
private static BukkitSimpleLogger simpleLogger;
@Getter
private BukkitAudiences audienceProvider;
/**
@@ -67,15 +70,15 @@ public class HamsterCorePlugin extends JavaPlugin {
@Override
public void onLoad() {
instance = this;
simpleLogger = new BukkitSimpleLogger(getInstance());
long start = System.currentTimeMillis();
Logger logger = getLogger();
logger.info("仓鼠核心正在初始化");
logger.info("Minecraft 版本: " + MinecraftVersion.getMCVersion());
logger.info("NMS 版本: " + MinecraftVersion.getNMSVersion());
simpleLogger.info("仓鼠核心正在初始化");
simpleLogger.info("Minecraft 版本: " + MinecraftVersion.getMCVersion());
simpleLogger.info("NMS 版本: " + MinecraftVersion.getNMSVersion());
try {
File dataFolder = getDataFolder();
if (dataFolder.mkdir()) {
logger.info("已生成插件存档文件夹");
simpleLogger.info("已生成插件存档文件夹");
}
File configFile = new File(dataFolder, "config.yml");
if (!configFile.exists()) {
@@ -86,53 +89,55 @@ public class HamsterCorePlugin extends JavaPlugin {
}
}
CoreBukkitAPI.init(configFile);
logger.info("已初始化 CoreAPI");
simpleLogger.info("已初始化 CoreAPI");
} catch (Exception e) {
logger.log(Level.WARNING, "初始化 CoreAPI 出错", e);
simpleLogger.log(Level.WARNING, "初始化 CoreAPI 出错", e);
}
CoreMessage.init(this);
logger.info("已初始化语言文本");
simpleLogger.info("已初始化语言文本");
long time = System.currentTimeMillis() - start;
logger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms");
simpleLogger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms");
}
@Override
public void onEnable() {
long start = System.currentTimeMillis();
Logger logger = getLogger();
logger.info("仓鼠核心正在启动");
simpleLogger.info("仓鼠核心正在启动");
audienceProvider = BukkitAudiences.create(this);
logger.info("已创建 AudienceProvider");
simpleLogger.info("已创建 AudienceProvider");
CoreCommand.INSTANCE.register();
LoreCommand.INSTANCE.register();
NBTCommand.INSTANCE.register();
Bukkit.getPluginManager().registerEvents(PageListener.INSTANCE, this);
logger.info("已注册 PageListener");
simpleLogger.info("已注册 PageListener");
Bukkit.getPluginManager().registerEvents(CallbackListener.INSTANCE, this);
logger.info("已注册 CallbackListener");
simpleLogger.info("已注册 CallbackListener");
Bukkit.getPluginManager().registerEvents(DebugListener.INSTANCE, this);
logger.info("已注册 DebugListener");
simpleLogger.info("已注册 DebugListener");
long time = System.currentTimeMillis() - start;
sync(() -> {
PointAPI.reloadPlayerPointAPIHook();
VaultAPI.reloadVaultHook();
async(this::checkUpdate);
});
logger.info("仓鼠核心启动完成,总计耗时 " + time + " ms");
simpleLogger.info("仓鼠核心启动完成,总计耗时 " + time + " ms");
}
@Override
public void onDisable() {
long start = System.currentTimeMillis();
Logger logger = getLogger();
if (CoreAPI.getInstance().isEnableRedis()) {
CoreAPI.getInstance().getJedisPool().close();
logger.info("已关闭 Redis 连接池");
CoreAPI.getInstance().getHikariDataSource().close();
logger.info("已关闭数据库连接池");
simpleLogger.info("已关闭 Redis 连接池");
}
if (CoreAPI.getInstance().isEnableDatabase()) {
((HikariDataSource) CoreAPI.getInstance().getDataSource()).close();
simpleLogger.info("已关闭数据库连接池");
}
CoreAPI.getInstance().getExecutorService().shutdownNow();
logger.info("已关闭 ExecutorService 线程池");
simpleLogger.info("已关闭 ExecutorService 线程池");
CoreAPI.getInstance().getScheduledService().shutdownNow();
logger.info("已关闭 ScheduledExecutorService 线程池");
simpleLogger.info("已关闭 ScheduledExecutorService 线程池");
for (Player player : Bukkit.getOnlinePlayers()) {
InventoryView view = player.getOpenInventory();
Inventory inventory = view.getTopInventory();
@@ -141,9 +146,9 @@ public class HamsterCorePlugin extends JavaPlugin {
}
player.closeInventory();
}
logger.info("已关闭所有玩家的界面");
simpleLogger.info("已关闭所有玩家的界面");
long time = System.currentTimeMillis() - start;
logger.info("仓鼠核心已关闭,总计耗时 " + time + " ms");
simpleLogger.info("仓鼠核心已关闭,总计耗时 " + time + " ms");
}
private void checkUpdate() {

View File

@@ -3,6 +3,7 @@ package cn.hamster3.mc.plugin.core.bukkit.api;
import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin;
import cn.hamster3.mc.plugin.core.bukkit.impl.ItemStackAdapter;
import cn.hamster3.mc.plugin.core.bukkit.impl.PotionEffectAdapter;
import cn.hamster3.mc.plugin.core.bukkit.util.BukkitSimpleLogger;
import cn.hamster3.mc.plugin.core.bukkit.util.MinecraftVersion;
import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.config.ConfigSection;
@@ -20,7 +21,6 @@ import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.logging.Logger;
@SuppressWarnings("unused")
public final class CoreBukkitAPI extends CoreAPI {
@@ -62,8 +62,8 @@ public final class CoreBukkitAPI extends CoreAPI {
}
@Override
public @NotNull Logger getLogger() {
return HamsterCorePlugin.getInstance().getLogger();
public @NotNull BukkitSimpleLogger getLogger() {
return HamsterCorePlugin.getSimpleLogger();
}
@Override

View File

@@ -78,13 +78,13 @@ public class YamlCommand extends ChildCommand {
config.set("test-item", stack);
File dataFolder = new File(HamsterCorePlugin.getInstance().getDataFolder(), "yaml");
if (dataFolder.mkdirs()) {
HamsterCorePlugin.getInstance().getLogger().info("创建 yaml 存档文件夹");
HamsterCorePlugin.getSimpleLogger().info("创建 yaml 存档文件夹");
}
File saveFile = new File(dataFolder, sender.getName() + "_" + System.currentTimeMillis() + ".yml");
try {
config.save(saveFile);
} catch (IOException e) {
e.printStackTrace();
HamsterCorePlugin.getSimpleLogger().error(e);
}
sender.sendMessage("§a信息已保存至文件 " + saveFile.getAbsolutePath());
return true;

View File

@@ -20,7 +20,7 @@ public class EconomyAPI {
* @return true代表安装了false代表未安装
*/
public static boolean isSetupEconomy() {
return VaultAPI.isSetupVault() && VaultAPI.getEconomy() != null;
return VaultAPI.isVaultEnabled() && VaultAPI.getEconomy() != null;
}
/**

View File

@@ -1,6 +1,7 @@
package cn.hamster3.mc.plugin.core.bukkit.hook;
import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin;
import lombok.Getter;
import org.black_ixx.playerpoints.PlayerPoints;
import org.black_ixx.playerpoints.PlayerPointsAPI;
import org.bukkit.Bukkit;
@@ -14,6 +15,7 @@ import java.util.UUID;
*/
@SuppressWarnings("unused")
public class PointAPI {
@Getter
private static PlayerPointsAPI playerPointsAPI;
private PointAPI() {
@@ -25,20 +27,11 @@ public class PointAPI {
public static void reloadPlayerPointAPIHook() {
Plugin plugin = Bukkit.getPluginManager().getPlugin("PlayerPoints");
if (plugin == null) {
HamsterCorePlugin.getInstance().getLogger().warning("未检测到 PlayerPointAPI 插件");
HamsterCorePlugin.getSimpleLogger().warn("未检测到 PlayerPointAPI 插件");
return;
}
playerPointsAPI = ((PlayerPoints) plugin).getAPI();
HamsterCorePlugin.getInstance().getLogger().info("PlayerPointAPI 挂接成功");
}
/**
* 获取 PlayerPointsAPI 实例
*
* @return PlayerPointsAPI 实例
*/
public static PlayerPointsAPI getPlayerPointsAPI() {
return playerPointsAPI;
HamsterCorePlugin.getSimpleLogger().info("PlayerPointAPI 挂接成功");
}
/**

View File

@@ -1,22 +1,27 @@
package cn.hamster3.mc.plugin.core.bukkit.hook;
import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin;
import cn.hamster3.mc.plugin.core.bukkit.util.BukkitSimpleLogger;
import lombok.Getter;
import net.milkbowl.vault.chat.Chat;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.permission.Permission;
import org.bukkit.Bukkit;
import org.bukkit.plugin.RegisteredServiceProvider;
import java.util.logging.Logger;
/**
* Vault API
*/
@Getter
@SuppressWarnings("unused")
public class VaultAPI {
@Getter
private static boolean vaultEnabled;
@Getter
private static Chat chat;
@Getter
private static Economy economy;
@Getter
private static Permission permission;
private VaultAPI() {
@@ -27,9 +32,9 @@ public class VaultAPI {
economy = null;
permission = null;
vaultEnabled = Bukkit.getPluginManager().isPluginEnabled("Vault");
Logger logger = HamsterCorePlugin.getInstance().getLogger();
BukkitSimpleLogger logger = HamsterCorePlugin.getSimpleLogger();
if (!vaultEnabled) {
logger.warning("未检测到 Vault 插件");
logger.warn("未检测到 Vault 插件");
return;
}
logger.info("已连接 Vault");
@@ -40,7 +45,7 @@ public class VaultAPI {
chat = chatProvider.getProvider();
logger.info("聊天系统挂接成功");
} else {
logger.warning("未检测到聊天系统");
logger.warn("未检测到聊天系统");
}
RegisteredServiceProvider<Economy> economyProvider = Bukkit.getServer().getServicesManager().getRegistration(Economy.class);
@@ -48,7 +53,7 @@ public class VaultAPI {
economy = economyProvider.getProvider();
logger.info("经济系统挂接成功");
} else {
logger.warning("未检测到经济系统");
logger.warn("未检测到经济系统");
}
RegisteredServiceProvider<Permission> permissionProvider = Bukkit.getServer().getServicesManager().getRegistration(Permission.class);
@@ -56,45 +61,9 @@ public class VaultAPI {
permission = permissionProvider.getProvider();
logger.info("权限系统挂接成功");
} else {
logger.warning("未检测到权限插件");
logger.warn("未检测到权限插件");
}
logger.info("已完成 VaultAPI 挂载");
}
/**
* 返回服务器是否安装了 Vault 插件
*
* @return true 代表服务器已安装
*/
public static boolean isSetupVault() {
return vaultEnabled;
}
/**
* 返回 Vault 的 Chat 前置系统
*
* @return Chat 系统
*/
public static Chat getChat() {
return chat;
}
/**
* 返回 Vault 的 Economy 前置系统
*
* @return Economy 系统
*/
public static Economy getEconomy() {
return economy;
}
/**
* 返回 Vault 的 Permission 前置系统
*
* @return Permission 系统
*/
public static Permission getPermission() {
return permission;
}
}

View File

@@ -98,8 +98,7 @@ public class PageConfig implements InventoryHolder {
try {
buttonSounds.put(key, Sound.valueOf(soundName));
} catch (Exception e) {
HamsterCorePlugin.getInstance().getLogger().warning("初始化 PageConfig 时遇到了一个异常:");
e.printStackTrace();
HamsterCorePlugin.getSimpleLogger().error(e, "初始化 PageConfig 时遇到了一个异常: ");
}
}
}

View File

@@ -39,8 +39,7 @@ public class PageListener implements Listener {
try {
pageHandler.onClick(event);
} catch (Exception e) {
HamsterCorePlugin.getInstance().getLogger().warning(String.format("执行 %s 的 onClick(event) 时遇到了一个异常: ", pageHandler.getClass().getName()));
e.printStackTrace();
HamsterCorePlugin.getSimpleLogger().warn(e, "执行 %s 的 onClick(event) 时遇到了一个异常: ", pageHandler.getClass().getName());
}
if (event.isCancelled()) {
return;
@@ -55,31 +54,29 @@ public class PageListener implements Listener {
try {
pageHandler.onClickInside(event);
} catch (Exception e) {
HamsterCorePlugin.getInstance().getLogger().warning(String.format("执行 %s 的 onClickInside(event) 时遇到了一个异常: ", pageHandler.getClass().getName()));
e.printStackTrace();
HamsterCorePlugin.getSimpleLogger().warn(e, "执行 %s 的 onClickInside(event) 时遇到了一个异常: ", pageHandler.getClass().getName());
}
try {
pageHandler.onClickInside(event.getClick(), event.getAction(), index);
} catch (Exception e) {
HamsterCorePlugin.getInstance().getLogger().warning(String.format(
HamsterCorePlugin.getSimpleLogger().warn(e,
"执行 %s 的 onClickInside(%s, %s, %d) 时遇到了一个异常: ",
pageHandler.getClass().getName(),
event.getClick().name(),
event.getAction().name(),
index
));
e.printStackTrace();
);
}
try {
pageHandler.onPlayButtonSound(event.getClick(), event.getAction(), index);
} catch (Exception e) {
HamsterCorePlugin.getInstance().getLogger().warning(String.format(
HamsterCorePlugin.getSimpleLogger().warn(e,
"执行 %s 的 onPlayButtonSound(%s, %s, %d) 时遇到了一个异常: ",
pageHandler.getClass().getName(),
event.getClick().name(),
event.getAction().name(),
index
));
);
}
}
@@ -93,8 +90,7 @@ public class PageListener implements Listener {
try {
pageHandler.onDrag(event);
} catch (Exception e) {
HamsterCorePlugin.getInstance().getLogger().warning(String.format("执行 %s 的 onDrag(event) 时遇到了一个异常: ", pageHandler.getClass().getName()));
e.printStackTrace();
HamsterCorePlugin.getSimpleLogger().warn(e, "执行 %s 的 onDrag(event) 时遇到了一个异常: ", pageHandler.getClass().getName());
}
if (event.isCancelled()) {
return;

View File

@@ -0,0 +1,38 @@
package cn.hamster3.mc.plugin.core.bukkit.util;
import cn.hamster3.mc.plugin.core.common.util.SimpleLogger;
import lombok.Getter;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import java.util.logging.Level;
import java.util.logging.Logger;
@Getter
@SuppressWarnings("unused")
public class BukkitSimpleLogger extends SimpleLogger {
@NotNull
private final Plugin plugin;
@NotNull
private final Logger logger;
public BukkitSimpleLogger(@NotNull Plugin plugin) {
this.plugin = plugin;
logger = plugin.getLogger();
}
@Override
public void log(@NotNull Level level, @NotNull String msg) {
logger.log(level, msg);
}
@Override
public void log(@NotNull Level level, @NotNull Throwable throwable) {
logger.log(level, "", throwable);
}
@Override
public void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg) {
logger.log(level, msg, throwable);
}
}

View File

@@ -1,3 +1,6 @@
# 是否启用 redis 连接池功能
enable-redis: false
# redis 连接配置
# 完整格式如下:
# redis://用户名:密码@主机名:端口/数据库索引?参数名=参数值&参数名=参数值
@@ -8,6 +11,10 @@
# 若不设置数据库,则默认使用 0
redis-url: "redis://localhost:6379/0?clientName=HamsterCore&timeout=5s"
# 是否启用数据库连接池功能
enable-database: false
# 数据库连接池配置
datasource:
# 数据库链接驱动地址旧版服务端低于1.13请使用com.mysql.jdbc.Driver
driver: "com.mysql.cj.jdbc.Driver"

View File

@@ -1,10 +1,12 @@
package cn.hamster3.mc.plugin.core.bungee;
import cn.hamster3.mc.plugin.core.bungee.api.CoreBungeeAPI;
import cn.hamster3.mc.plugin.core.bungee.util.BungeeSimpleLogger;
import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.config.ConfigSection;
import cn.hamster3.mc.plugin.core.common.config.YamlConfig;
import cn.hamster3.mc.plugin.core.common.util.UpdateCheckUtils;
import com.zaxxer.hikari.HikariDataSource;
import lombok.Getter;
import net.kyori.adventure.platform.bungeecord.BungeeAudiences;
import net.md_5.bungee.api.ProxyServer;
@@ -18,24 +20,25 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.logging.Level;
import java.util.logging.Logger;
public class HamsterCorePlugin extends Plugin {
@Getter
private static HamsterCorePlugin instance;
@Getter
private static BungeeSimpleLogger simpleLogger;
@Getter
private BungeeAudiences audienceProvider;
@Override
public void onLoad() {
instance = this;
simpleLogger = new BungeeSimpleLogger(this);
long start = System.currentTimeMillis();
Logger logger = getLogger();
logger.info("仓鼠核心正在初始化");
simpleLogger.info("仓鼠核心正在初始化");
try {
File dataFolder = getDataFolder();
if (dataFolder.mkdir()) {
logger.info("已生成插件存档文件夹");
simpleLogger.info("已生成插件存档文件夹");
}
File configFile = new File(dataFolder, "config.yml");
if (!configFile.exists()) {
@@ -46,40 +49,42 @@ public class HamsterCorePlugin extends Plugin {
}
}
CoreBungeeAPI.init(configFile);
logger.info("已初始化 CoreAPI");
simpleLogger.info("已初始化 CoreAPI");
} catch (Exception e) {
logger.log(Level.WARNING, "初始化 CoreAPI 出错", e);
simpleLogger.log(Level.WARNING, "初始化 CoreAPI 出错", e);
}
long time = System.currentTimeMillis() - start;
logger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms");
simpleLogger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms");
}
@Override
public void onEnable() {
long start = System.currentTimeMillis();
Logger logger = getLogger();
logger.info("仓鼠核心正在启动");
simpleLogger.info("仓鼠核心正在启动");
audienceProvider = BungeeAudiences.create(this);
logger.info("已创建 AudienceProvider");
simpleLogger.info("已创建 AudienceProvider");
CoreAPI.getInstance().getExecutorService().submit(this::checkUpdate);
long time = System.currentTimeMillis() - start;
logger.info("仓鼠核心启动完成,总计耗时 " + time + " ms");
simpleLogger.info("仓鼠核心启动完成,总计耗时 " + time + " ms");
}
@Override
public void onDisable() {
long start = System.currentTimeMillis();
Logger logger = getLogger();
if (CoreAPI.getInstance().isEnableRedis()) {
CoreAPI.getInstance().getJedisPool().close();
logger.info("已关闭 Redis 连接池");
CoreAPI.getInstance().getHikariDataSource().close();
logger.info("已关闭数据库连接池");
simpleLogger.info("已关闭 Redis 连接池");
}
if (CoreAPI.getInstance().isEnableDatabase()) {
((HikariDataSource) CoreAPI.getInstance().getDataSource()).close();
simpleLogger.info("已关闭数据库连接池");
}
CoreAPI.getInstance().getExecutorService().shutdownNow();
logger.info("已关闭 ExecutorService 线程池");
simpleLogger.info("已关闭 ExecutorService 线程池");
CoreAPI.getInstance().getScheduledService().shutdownNow();
logger.info("已关闭 ScheduledExecutorService 线程池");
simpleLogger.info("已关闭 ScheduledExecutorService 线程池");
long time = System.currentTimeMillis() - start;
logger.info("仓鼠核心已关闭,总计耗时 " + time + " ms");
simpleLogger.info("仓鼠核心已关闭,总计耗时 " + time + " ms");
}
private void checkUpdate() {

View File

@@ -1,6 +1,7 @@
package cn.hamster3.mc.plugin.core.bungee.api;
import cn.hamster3.mc.plugin.core.bungee.HamsterCorePlugin;
import cn.hamster3.mc.plugin.core.bungee.util.BungeeSimpleLogger;
import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.config.ConfigSection;
import cn.hamster3.mc.plugin.core.common.config.YamlConfig;
@@ -15,7 +16,6 @@ import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.logging.Logger;
@SuppressWarnings("unused")
public final class CoreBungeeAPI extends CoreAPI {
@@ -51,8 +51,8 @@ public final class CoreBungeeAPI extends CoreAPI {
}
@Override
public @NotNull Logger getLogger() {
return HamsterCorePlugin.getInstance().getLogger();
public @NotNull BungeeSimpleLogger getLogger() {
return HamsterCorePlugin.getSimpleLogger();
}
@Override

View File

@@ -1,100 +0,0 @@
package cn.hamster3.mc.plugin.core.bungee.util;
import lombok.Getter;
import net.md_5.bungee.api.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
@Getter
@SuppressWarnings("unused")
public class BungeePluginLogger {
@NotNull
private final Plugin plugin;
@NotNull
private final Logger logger;
public BungeePluginLogger(@NotNull Plugin plugin) {
this.plugin = plugin;
logger = plugin.getLogger();
}
public void log(@NotNull Level level, @NotNull String msg) {
logger.log(level, msg);
}
public void log(@NotNull Level level, @NotNull String msg, @NotNull Object... args) {
try {
logger.log(level, String.format(msg, args));
} catch (Exception e) {
logger.log(Level.WARNING, "输出日志 " + msg + " 时遇到一个异常");
logger.log(Level.WARNING, "日志参数: " + Arrays.toString(args));
logger.log(Level.WARNING, "异常信息: ", e);
}
}
public void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg) {
logger.log(level, msg, throwable);
}
public void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg, @NotNull Object... args) {
try {
logger.log(level, String.format(msg, args), throwable);
} catch (Exception e) {
logger.log(Level.WARNING, "输出日志 " + msg + " 时遇到一个异常");
logger.log(Level.WARNING, "日志参数: " + Arrays.toString(args));
logger.log(Level.WARNING, "异常参数: ", throwable);
logger.log(Level.WARNING, "异常信息: ", e);
}
}
public void info(@NotNull String msg) {
log(Level.INFO, msg);
}
public void info(@NotNull String msg, @NotNull Object... args) {
log(Level.INFO, msg, args);
}
public void info(@NotNull Throwable throwable, @NotNull String msg) {
log(Level.INFO, throwable, msg);
}
public void info(@NotNull Throwable throwable, @NotNull String msg, @NotNull Object... args) {
log(Level.INFO, throwable, msg, args);
}
public void warn(@NotNull String msg) {
log(Level.WARNING, msg);
}
public void warn(@NotNull String msg, @NotNull Object... args) {
log(Level.WARNING, msg, args);
}
public void warn(@NotNull Throwable throwable, @NotNull String msg) {
log(Level.WARNING, throwable, msg);
}
public void warn(@NotNull Throwable throwable, @NotNull String msg, @NotNull Object... args) {
log(Level.WARNING, throwable, msg, args);
}
public void error(@NotNull String msg) {
log(Level.SEVERE, msg);
}
public void error(@NotNull String msg, @NotNull Object... args) {
log(Level.SEVERE, msg, args);
}
public void error(@NotNull Throwable throwable, @NotNull String msg) {
log(Level.SEVERE, throwable, msg);
}
public void error(@NotNull Throwable throwable, @NotNull String msg, @NotNull Object... args) {
log(Level.SEVERE, throwable, msg, args);
}
}

View File

@@ -0,0 +1,38 @@
package cn.hamster3.mc.plugin.core.bungee.util;
import cn.hamster3.mc.plugin.core.common.util.SimpleLogger;
import lombok.Getter;
import net.md_5.bungee.api.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import java.util.logging.Level;
import java.util.logging.Logger;
@Getter
@SuppressWarnings("unused")
public class BungeeSimpleLogger extends SimpleLogger {
@NotNull
private final Plugin plugin;
@NotNull
private final Logger logger;
public BungeeSimpleLogger(@NotNull Plugin plugin) {
this.plugin = plugin;
logger = plugin.getLogger();
}
@Override
public void log(@NotNull Level level, @NotNull String msg) {
logger.log(level, msg);
}
@Override
public void log(@NotNull Level level, @NotNull Throwable throwable) {
logger.log(level, "", throwable);
}
@Override
public void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg) {
logger.log(level, msg, throwable);
}
}

View File

@@ -3,11 +3,13 @@ package cn.hamster3.mc.plugin.core.common.api;
import cn.hamster3.mc.plugin.core.common.config.ConfigSection;
import cn.hamster3.mc.plugin.core.common.thread.NamedThreadFactory;
import cn.hamster3.mc.plugin.core.common.util.CoreUtils;
import cn.hamster3.mc.plugin.core.common.util.SimpleLogger;
import com.google.gson.Gson;
import com.zaxxer.hikari.HikariDataSource;
import lombok.Getter;
import net.kyori.adventure.platform.AudienceProvider;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import redis.clients.jedis.JedisPool;
import javax.sql.DataSource;
@@ -16,50 +18,62 @@ import java.sql.SQLException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.logging.Logger;
@Getter
@SuppressWarnings("unused")
public abstract class CoreAPI {
@Getter
protected static CoreAPI instance;
/**
* Redis 连接池
*/
@Getter
@NotNull
private final JedisPool jedisPool;
/**
* 公用数据库连接池
*/
@Getter
@NotNull
private final HikariDataSource hikariDataSource;
private final boolean enableRedis;
private final boolean enableDatabase;
/**
* 异步线程池
*/
@Getter
@NotNull
private final ExecutorService executorService;
/**
* 调度器线程池
*/
@Getter
@NotNull
private final ScheduledExecutorService scheduledService;
/**
* 公用 Redis 连接池
*/
@Nullable
private JedisPool jedisPool;
/**
* 公用数据库连接池
*/
@Nullable
private HikariDataSource hikariDataSource;
public CoreAPI(@NotNull ConfigSection config) {
SimpleLogger logger = getLogger();
executorService = Executors.newCachedThreadPool(new NamedThreadFactory("HamsterCore - Executor"));
scheduledService = Executors.newScheduledThreadPool(1, new NamedThreadFactory("HamsterCore - Scheduler"));
logger.info("已创建线程池");
getLogger().info("正在创建 Redis 连接池");
enableRedis = config.getBoolean("enable-redis", true);
if (enableRedis) {
logger.info("正在创建 Redis 连接池");
jedisPool = new JedisPool(config.getString("redis-url"));
getLogger().info("Redis 连接池创建完成");
logger.info("Redis 连接池创建完成");
} else {
logger.info("未启用 Redis 功能");
}
enableDatabase = config.getBoolean("enable-database", true);
if (enableDatabase) {
ConfigSection datasourceConfig = config.getSection("datasource");
if (datasourceConfig == null) {
throw new IllegalArgumentException("配置文件中未找到 datasource 节点");
}
getLogger().info("正在创建数据库连接池");
logger.info("正在创建数据库连接池");
hikariDataSource = (HikariDataSource) CoreUtils.getDataSource(datasourceConfig);
getLogger().info("数据库连接池创建完成");
logger.info("数据库连接池创建完成");
} else {
logger.info("未启用数据库功能");
}
}
/**
@@ -69,8 +83,11 @@ public abstract class CoreAPI {
*/
@NotNull
public DataSource getDataSource() {
if (hikariDataSource != null) {
return hikariDataSource;
}
throw new IllegalStateException("仓鼠核心未启用数据库功能");
}
/**
* 获取公用数据库连接
@@ -84,7 +101,15 @@ public abstract class CoreAPI {
}
@NotNull
public abstract Logger getLogger();
public JedisPool getJedisPool() {
if (jedisPool != null) {
return jedisPool;
}
throw new IllegalStateException("仓鼠核心未启用 Redis 功能");
}
@NotNull
public abstract SimpleLogger getLogger();
/**
* @return GSON 工具

View File

@@ -1,52 +1,38 @@
package cn.hamster3.mc.plugin.core.bukkit.util;
package cn.hamster3.mc.plugin.core.common.util;
import lombok.Getter;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
@Getter
@SuppressWarnings("unused")
public class BukkitPluginLogger {
@NotNull
private final Plugin plugin;
@NotNull
private final Logger logger;
public abstract class SimpleLogger {
public abstract void log(@NotNull Level level, @NotNull String msg);
public BukkitPluginLogger(@NotNull Plugin plugin) {
this.plugin = plugin;
logger = plugin.getLogger();
}
public abstract void log(@NotNull Level level, @NotNull Throwable throwable);
public void log(@NotNull Level level, @NotNull String msg) {
logger.log(level, msg);
}
public abstract void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg);
public void log(@NotNull Level level, @NotNull String msg, @NotNull Object... args) {
try {
logger.log(level, String.format(msg, args));
log(level, String.format(msg, args));
} catch (Exception e) {
logger.log(Level.WARNING, "输出日志 " + msg + " 时遇到一个异常");
logger.log(Level.WARNING, "日志参数: " + Arrays.toString(args));
logger.log(Level.WARNING, "异常信息: ", e);
log(Level.WARNING, "输出日志 " + msg + " 时遇到一个异常");
log(Level.WARNING, "日志参数: " + Arrays.toString(args));
log(Level.WARNING, "异常信息: ", e);
}
}
public void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg) {
logger.log(level, msg, throwable);
}
public void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg, @NotNull Object... args) {
try {
logger.log(level, String.format(msg, args), throwable);
log(level, String.format(msg, args), throwable);
} catch (Exception e) {
logger.log(Level.WARNING, "输出日志 " + msg + " 时遇到一个异常");
logger.log(Level.WARNING, "日志参数: " + Arrays.toString(args));
logger.log(Level.WARNING, "异常参数: ", throwable);
logger.log(Level.WARNING, "异常信息: ", e);
log(Level.WARNING, "输出日志 " + msg + " 时遇到一个异常");
log(Level.WARNING, "日志参数: " + Arrays.toString(args));
log(Level.WARNING, "异常参数: ", throwable);
log(Level.WARNING, "异常信息: ", e);
}
}
@@ -58,6 +44,10 @@ public class BukkitPluginLogger {
log(Level.INFO, msg, args);
}
public void info(@NotNull Throwable throwable) {
log(Level.INFO, throwable);
}
public void info(@NotNull Throwable throwable, @NotNull String msg) {
log(Level.INFO, throwable, msg);
}
@@ -74,6 +64,10 @@ public class BukkitPluginLogger {
log(Level.WARNING, msg, args);
}
public void warn(@NotNull Throwable throwable) {
log(Level.WARNING, throwable);
}
public void warn(@NotNull Throwable throwable, @NotNull String msg) {
log(Level.WARNING, throwable, msg);
}
@@ -90,6 +84,10 @@ public class BukkitPluginLogger {
log(Level.SEVERE, msg, args);
}
public void error(@NotNull Throwable throwable) {
log(Level.SEVERE, throwable);
}
public void error(@NotNull Throwable throwable, @NotNull String msg) {
log(Level.SEVERE, throwable, msg);
}

View File

@@ -4,6 +4,7 @@ import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.config.YamlConfig;
import cn.hamster3.mc.plugin.core.common.util.UpdateCheckUtils;
import cn.hamster3.mc.plugin.core.velocity.api.CoreVelocityAPI;
import cn.hamster3.mc.plugin.core.velocity.util.VelocitySimpleLogger;
import com.google.inject.Inject;
import com.velocitypowered.api.event.PostOrder;
import com.velocitypowered.api.event.Subscribe;
@@ -36,25 +37,22 @@ public class HamsterCorePlugin {
@Getter
private static HamsterCorePlugin instance;
@Getter
private final java.util.logging.Logger logger;
@Getter
private final Logger slf4jLogger;
private final VelocitySimpleLogger simpleLogger;
@Getter
private final ProxyServer proxyServer;
@Getter
private final File dataFolder;
@Inject
public HamsterCorePlugin(Logger slf4jLogger, ProxyServer proxyServer, @DataDirectory Path dataPath) {
logger = java.util.logging.Logger.getLogger("hamster-core");
this.slf4jLogger = slf4jLogger;
public HamsterCorePlugin(Logger logger, ProxyServer proxyServer, @DataDirectory Path dataPath) {
this.simpleLogger = new VelocitySimpleLogger(logger);
this.proxyServer = proxyServer;
dataFolder = dataPath.toFile();
instance = this;
long start = System.currentTimeMillis();
try {
if (dataFolder.mkdir()) {
slf4jLogger.info("已生成插件存档文件夹");
simpleLogger.info("已生成插件存档文件夹");
}
File configFile = new File(dataFolder, "config.yml");
if (!configFile.exists()) {
@@ -65,38 +63,40 @@ public class HamsterCorePlugin {
}
}
CoreVelocityAPI.init(configFile);
slf4jLogger.info("已初始化 CoreAPI");
simpleLogger.info("已初始化 CoreAPI");
} catch (Exception e) {
slf4jLogger.error("初始化 CoreAPI 出错", e);
simpleLogger.error("初始化 CoreAPI 出错", e);
}
long time = System.currentTimeMillis() - start;
slf4jLogger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms");
simpleLogger.info("仓鼠核心初始化完成,总计耗时 " + time + " ms");
}
@Subscribe(order = PostOrder.FIRST)
public void onProxyInitialization(ProxyInitializeEvent event) {
long start = System.currentTimeMillis();
slf4jLogger.info("仓鼠核心正在启动");
simpleLogger.info("仓鼠核心正在启动");
CoreAPI.getInstance().getExecutorService().submit(this::checkUpdate);
long time = System.currentTimeMillis() - start;
slf4jLogger.info("仓鼠核心启动完成,总计耗时 " + time + " ms");
simpleLogger.info("仓鼠核心启动完成,总计耗时 " + time + " ms");
}
@Subscribe(order = PostOrder.LAST)
public void onProxyShutdown(ProxyShutdownEvent event) {
long start = System.currentTimeMillis();
if (CoreAPI.getInstance().isEnableRedis()) {
CoreAPI.getInstance().getJedisPool().close();
slf4jLogger.info("已关闭 Redis 连接池");
if (CoreAPI.getInstance().getDataSource() instanceof HikariDataSource dataSource) {
dataSource.close();
slf4jLogger.info("已关闭数据库连接池");
simpleLogger.info("已关闭 Redis 连接池");
}
if (CoreAPI.getInstance().isEnableDatabase()) {
((HikariDataSource) CoreAPI.getInstance().getDataSource()).close();
simpleLogger.info("已关闭数据库连接池");
}
CoreAPI.getInstance().getExecutorService().shutdownNow();
slf4jLogger.info("已关闭 ExecutorService 线程池");
simpleLogger.info("已关闭 ExecutorService 线程池");
CoreAPI.getInstance().getScheduledService().shutdownNow();
slf4jLogger.info("已关闭 ScheduledExecutorService 线程池");
simpleLogger.info("已关闭 ScheduledExecutorService 线程池");
long time = System.currentTimeMillis() - start;
slf4jLogger.info("仓鼠核心关闭完成,总计耗时 " + time + " ms");
simpleLogger.info("仓鼠核心关闭,总计耗时 " + time + " ms");
}
private void checkUpdate() {

View File

@@ -8,6 +8,7 @@ import cn.hamster3.mc.plugin.core.common.impl.ComponentTypeAdapter;
import cn.hamster3.mc.plugin.core.common.impl.MessageTypeAdapter;
import cn.hamster3.mc.plugin.core.velocity.HamsterCorePlugin;
import cn.hamster3.mc.plugin.core.velocity.impl.AudienceProviderImpl;
import cn.hamster3.mc.plugin.core.velocity.util.VelocitySimpleLogger;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import net.kyori.adventure.platform.AudienceProvider;
@@ -16,7 +17,6 @@ import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.logging.Logger;
@SuppressWarnings("unused")
public final class CoreVelocityAPI extends CoreAPI {
@@ -57,8 +57,8 @@ public final class CoreVelocityAPI extends CoreAPI {
}
@Override
public @NotNull Logger getLogger() {
return HamsterCorePlugin.getInstance().getLogger();
public @NotNull VelocitySimpleLogger getLogger() {
return HamsterCorePlugin.getInstance().getSimpleLogger();
}
@Override

View File

@@ -0,0 +1,57 @@
package cn.hamster3.mc.plugin.core.velocity.util;
import cn.hamster3.mc.plugin.core.common.util.SimpleLogger;
import lombok.Getter;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import java.util.logging.Level;
@Getter
public class VelocitySimpleLogger extends SimpleLogger {
@NotNull
private final Logger logger;
public VelocitySimpleLogger(@NotNull Logger logger) {
this.logger = logger;
}
@Override
public void log(@NotNull Level level, @NotNull String msg) {
if (level == Level.INFO) {
logger.info(msg);
} else if (level == Level.WARNING) {
logger.warn(msg);
} else if (level == Level.SEVERE) {
logger.error(msg);
} else {
logger.trace(msg);
}
}
@Override
public void log(@NotNull Level level, @NotNull Throwable throwable) {
if (level == Level.INFO) {
logger.info("", throwable);
} else if (level == Level.WARNING) {
logger.warn("", throwable);
} else if (level == Level.SEVERE) {
logger.error("", throwable);
} else {
logger.trace("", throwable);
}
}
@Override
public void log(@NotNull Level level, @NotNull Throwable throwable, @NotNull String msg) {
if (level == Level.INFO) {
logger.info(msg, throwable);
} else if (level == Level.WARNING) {
logger.warn(msg, throwable);
} else if (level == Level.SEVERE) {
logger.error(msg, throwable);
} else {
logger.trace(msg, throwable);
}
}
}