From a861371a94910ce019804e0a6f796573b64c5450 Mon Sep 17 00:00:00 2001 From: rjenkinsjr Date: Wed, 30 Mar 2016 22:19:58 -0400 Subject: [PATCH] Tolerate invalid config values with defaults --- .../slf4j/impl/BukkitPluginLoggerAdapter.java | 47 ++++++++++--------- src/site/markdown/index.md | 15 ++++-- 2 files changed, 36 insertions(+), 26 deletions(-) diff --git a/src/main/java/org/slf4j/impl/BukkitPluginLoggerAdapter.java b/src/main/java/org/slf4j/impl/BukkitPluginLoggerAdapter.java index dfc561a..3bc4ee4 100644 --- a/src/main/java/org/slf4j/impl/BukkitPluginLoggerAdapter.java +++ b/src/main/java/org/slf4j/impl/BukkitPluginLoggerAdapter.java @@ -79,31 +79,33 @@ import org.yaml.snakeyaml.Yaml; * * *

@@ -249,6 +251,7 @@ public final class BukkitPluginLoggerAdapter extends MarkerIgnoringBase { // (1 and 2 are handled by using the Bukkit API.) BukkitPluginLoggerAdapter.CONFIG_VALUE_DEFAULT_LOG_LEVEL = BukkitPluginLoggerAdapter.stringToLevel(BukkitPluginLoggerAdapter.getStringProperty(BukkitPluginLoggerAdapter.CONFIG_KEY_DEFAULT_LOG_LEVEL, BukkitPluginLoggerAdapter.CONFIG_FALLBACK_DEFAULT_LOG_LEVEL)); + if (BukkitPluginLoggerAdapter.CONFIG_VALUE_DEFAULT_LOG_LEVEL == null) BukkitPluginLoggerAdapter.CONFIG_VALUE_DEFAULT_LOG_LEVEL = BukkitPluginLoggerAdapter.stringToLevel(BukkitPluginLoggerAdapter.CONFIG_FALLBACK_DEFAULT_LOG_LEVEL); BukkitPluginLoggerAdapter.CONFIG_VALUE_SHOW_HEADER = BukkitPluginLoggerAdapter.getBooleanProperty(BukkitPluginLoggerAdapter.CONFIG_KEY_SHOW_HEADER, BukkitPluginLoggerAdapter.CONFIG_FALLBACK_SHOW_HEADER); BukkitPluginLoggerAdapter.CONFIG_VALUE_SHOW_LOG_NAME = BukkitPluginLoggerAdapter.getBooleanProperty(BukkitPluginLoggerAdapter.CONFIG_KEY_SHOW_LOG_NAME, @@ -266,7 +269,9 @@ public final class BukkitPluginLoggerAdapter extends MarkerIgnoringBase { if (BukkitPluginLoggerAdapter.BUKKIT_PLUGIN == null) { return defaultValue; } final String prop = BukkitPluginLoggerAdapter.BUKKIT_PLUGIN.getConfig() .getString(name); - return (prop == null) ? defaultValue : "true".equalsIgnoreCase(prop); + if ("true".equalsIgnoreCase(prop)) return true; + if ("false".equalsIgnoreCase(prop)) return false; + return defaultValue; } } @@ -333,7 +338,7 @@ public final class BukkitPluginLoggerAdapter extends MarkerIgnoringBase { } else if ("error".equalsIgnoreCase(levelStr)) { return Level.ERROR; } else { - return Level.INFO; + return null; } } @@ -623,9 +628,9 @@ public final class BukkitPluginLoggerAdapter extends MarkerIgnoringBase { } private Level determineCurrentLevel() { - final String levelString = this.recursivelyComputeLevelString(); - if (levelString != null) { - return BukkitPluginLoggerAdapter.stringToLevel(levelString); + final Level level = this.recursivelyComputeLevel(); + if (level != null) { + return level; } else { return BukkitPluginLoggerAdapter.CONFIG_VALUE_DEFAULT_LOG_LEVEL; } @@ -823,18 +828,18 @@ public final class BukkitPluginLoggerAdapter extends MarkerIgnoringBase { buf.toString(), t); } - private String recursivelyComputeLevelString() { + private Level recursivelyComputeLevel() { String tempName = this.name; - String levelString = null; + Level level = null; int indexOfLastDot = tempName.length(); - while ((levelString == null) && (indexOfLastDot > -1)) { + while ((level == null) && (indexOfLastDot > -1)) { tempName = tempName.substring(0, indexOfLastDot); - levelString = BukkitPluginLoggerAdapter.getStringProperty(BukkitPluginLoggerAdapter.CONFIG_KEY_PREFIX_LOG - + tempName, - null); + level = BukkitPluginLoggerAdapter.stringToLevel(BukkitPluginLoggerAdapter.getStringProperty(BukkitPluginLoggerAdapter.CONFIG_KEY_PREFIX_LOG + + tempName, + null)); indexOfLastDot = String.valueOf(tempName).lastIndexOf("."); } - return levelString; + return level; } } diff --git a/src/site/markdown/index.md b/src/site/markdown/index.md index 5f96fe7..e6a5da3 100644 --- a/src/site/markdown/index.md +++ b/src/site/markdown/index.md @@ -41,30 +41,30 @@ slf4j: # the plugin as "info" severity, but you'll see the actual severity in the # log message. This is due to a Bukkit logging limitation. # - # If not specified, default is "info". + # If not specified or given an invalid value, defaults to "info". defaultLogLevel: info # Shows an "[SLF4J]" header for every message logged through SLF4Bukkit. # - # If not specified, default is "false". + # If not specified or given an invalid value, defaults to "false". showHeader: false # Shows the name of each thread that is logging via SLF4Bukkit. You probably # don't want this information unless you're helping troubleshoot a plugin. # - # If not specified, default is "false". + # If not specified or given an invalid value, defaults to "false". showThreadName: false # Shows the full logger name (e.g. "info.ronjenkins.bukkit.MyPlugin"). # - # If not specified, default is "false". + # If not specified or given an invalid value, defaults to "false". showLogName: false # Shows the short logger name, which is the short Java package name format # (e.g. a logger named "info.ronjenkins.bukkit.MyPlugin" would have a short # name of "i.r.b.MyPlugin". # - # If not specified, default is "true". + # If not specified or given an invalid value, defaults to "true". showShortLogName: true # This section controls logging levels for individual loggers. @@ -77,6 +77,11 @@ slf4j: # The documentation for your plugin should elaborate on what logger names # are available. As a general rule, you won't need to specify levels for # specific loggers. + # + # For any logger, if the level specified here is invalid, or if the level is + # not specified at all, the level of the closest parent logger is used. If + # none of the logger's ancestors have a valid level defined, the + # value of "slf4j.defaultLogLevel" is used. info.ronjenkins.bukkit.MyPlugin: debug info.ronjenkins.SomeOtherLogger: warn ```