From 781e017ae9a170e83253bfbb8003fff6b1dc9d9e Mon Sep 17 00:00:00 2001 From: Phoenix616 Date: Fri, 17 Apr 2020 15:10:27 +0100 Subject: [PATCH] Add debug logging for configuration loading --- .../Breeze/Configuration/Configuration.java | 29 +++++++++++++++++-- .../java/com/Acrobot/ChestShop/ChestShop.java | 4 +-- .../ChestShop/Configuration/Properties.java | 4 +++ 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/Acrobot/Breeze/Configuration/Configuration.java b/src/main/java/com/Acrobot/Breeze/Configuration/Configuration.java index 86127e8..f0cb42a 100644 --- a/src/main/java/com/Acrobot/Breeze/Configuration/Configuration.java +++ b/src/main/java/com/Acrobot/Breeze/Configuration/Configuration.java @@ -11,8 +11,11 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Scanner; +import java.util.logging.Level; +import java.util.logging.Logger; import com.Acrobot.Breeze.Configuration.Annotations.Parser; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -44,8 +47,24 @@ public class Configuration { * @param clazz Class to modify */ public static void pairFileAndClass(File file, Class clazz) { + pairFileAndClass(file, clazz, Bukkit.getLogger()); + } + + /** + * Loads a YAML-formatted file into a class and modifies the file if some of class's fields are missing + * + * @param file File to load + * @param clazz Class to modify + * @param logger The logger to use to log some information about the pairing + */ + public static void pairFileAndClass(File file, Class clazz, Logger logger) { FileConfiguration config = YamlConfiguration.loadConfiguration(file); + boolean debug = config.getBoolean("DEBUG", false); + + if (debug) { + logger.log(Level.INFO, "Loading configuration " + file.getName()); + } try { BufferedWriter writer = new BufferedWriter(new FileWriter(file, true)); @@ -55,6 +74,9 @@ public class Configuration { for (Field field : clazz.getDeclaredFields()) { if (!Modifier.isStatic(field.getModifiers()) || Modifier.isTransient(field.getModifiers()) || !Modifier.isPublic(field.getModifiers())) { + if (debug) { + logger.log(Level.WARNING, "Field " + field.getName() + " is private, transient or not static!"); + } continue; } @@ -73,15 +95,18 @@ public class Configuration { writer.write(FieldParser.parse(field)); writer.newLine(); } + if (debug) { + logger.log(Level.INFO, field.getName() + ": " + Configuration.getParser(field).parseToYAML(field.get(null))); + } } catch (IllegalArgumentException | IllegalAccessException | IOException e) { - e.printStackTrace(); + logger.log(Level.SEVERE, "Error while loading field " + field.getName() + " in configuration " + file.getName(), e); } } writer.close(); } catch (IOException e) { - e.printStackTrace(); + logger.log(Level.SEVERE, "Error while loading configuration " + file.getName(), e); } } diff --git a/src/main/java/com/Acrobot/ChestShop/ChestShop.java b/src/main/java/com/Acrobot/ChestShop/ChestShop.java index 47dbeb1..0cdd111 100644 --- a/src/main/java/com/Acrobot/ChestShop/ChestShop.java +++ b/src/main/java/com/Acrobot/ChestShop/ChestShop.java @@ -153,8 +153,8 @@ public class ChestShop extends JavaPlugin { } public void loadConfig() { - Configuration.pairFileAndClass(loadFile("config.yml"), Properties.class); - Configuration.pairFileAndClass(loadFile("local.yml"), Messages.class); + Configuration.pairFileAndClass(loadFile("config.yml"), Properties.class, getBukkitLogger()); + Configuration.pairFileAndClass(loadFile("local.yml"), Messages.class, getBukkitLogger()); NameManager.load(); diff --git a/src/main/java/com/Acrobot/ChestShop/Configuration/Properties.java b/src/main/java/com/Acrobot/ChestShop/Configuration/Properties.java index 7b1813f..e1f9c08 100644 --- a/src/main/java/com/Acrobot/ChestShop/Configuration/Properties.java +++ b/src/main/java/com/Acrobot/ChestShop/Configuration/Properties.java @@ -77,6 +77,10 @@ public class Properties { }); } + @ConfigurationComment("Should the plugin log some messages that are useful for debugging?") + public static boolean DEBUG = false; + + @PrecededBySpace @ConfigurationComment("Do you want to turn off the automatic updates of ChestShop?") public static boolean TURN_OFF_UPDATES = false;