From 897a8389c9797b999f85c63c069e76f1a29214c7 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 16 Nov 2020 17:28:10 -0600 Subject: [PATCH] generalize log level to NB --- .../java/io/nosqlbench/engine/cli/NBCLI.java | 1 + .../nosqlbench/engine/cli/NBCLIOptions.java | 29 ++++++------- .../nosqlbench/nb/api/logging/NBLogLevel.java | 42 +++++++++++++++++++ 3 files changed, 58 insertions(+), 14 deletions(-) create mode 100644 nb-api/src/main/java/io/nosqlbench/nb/api/logging/NBLogLevel.java diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java index db6f08530..34ee57d16 100644 --- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java +++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLI.java @@ -21,6 +21,7 @@ import io.nosqlbench.nb.api.annotation.Annotator; import io.nosqlbench.nb.api.content.Content; import io.nosqlbench.nb.api.content.NBIO; import io.nosqlbench.nb.api.errors.BasicError; +import io.nosqlbench.nb.api.logging.NBLogLevel; import io.nosqlbench.nb.api.markdown.exporter.MarkdownExporter; import io.nosqlbench.virtdata.userlibs.apps.VirtDataMainApp; import org.slf4j.Logger; diff --git a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIOptions.java b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIOptions.java index 807377d0a..10bafb9c2 100644 --- a/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIOptions.java +++ b/engine-cli/src/main/java/io/nosqlbench/engine/cli/NBCLIOptions.java @@ -108,7 +108,7 @@ public class NBCLIOptions { private String wantsMetricsForActivity; private String sessionName = ""; private boolean showScript = false; - private Level consoleLevel = Level.WARN; + private NBLogLevel consoleLevel = NBLogLevel.WARN; private final List histoLoggerConfigs = new ArrayList<>(); private final List statsLoggerConfigs = new ArrayList<>(); private final List classicHistoConfigs = new ArrayList<>(); @@ -120,8 +120,8 @@ public class NBCLIOptions { private String[] rleDumpOptions = new String[0]; private String[] cyclelogImportOptions = new String[0]; private String consoleLoggingPattern = DEFAULT_CONSOLE_LOGGING_PATTERN; - private String logsLevel = "INFO"; - private Map logLevelsOverrides = new HashMap<>(); + private NBLogLevel logsLevel = NBLogLevel.INFO; + private Map logLevelsOverrides = new HashMap<>(); private boolean enableChart = false; private boolean dockerMetrics = false; private boolean wantsScenariosList = false; @@ -393,7 +393,8 @@ public class NBCLIOptions { break; case LOGS_LEVEL: arglist.removeFirst(); - logsLevel = readWordOrThrow(arglist, "a log level"); + String loglevel = readWordOrThrow(arglist, "a log level"); + this.logsLevel = NBLogLevel.valueOfName(loglevel); break; case LOG_LEVEL_OVERRIDE: arglist.removeFirst(); @@ -464,15 +465,15 @@ public class NBCLIOptions { wantsMarkerTypes = true; break; case DASH_V_INFO: - consoleLevel = Level.INFO; + consoleLevel = NBLogLevel.INFO; arglist.removeFirst(); break; case DASH_VV_DEBUG: - consoleLevel = Level.DEBUG; + consoleLevel = NBLogLevel.DEBUG; arglist.removeFirst(); break; case DASH_VVV_TRACE: - consoleLevel = Level.TRACE; + consoleLevel = NBLogLevel.TRACE; arglist.removeFirst(); break; case WITH_LOGGING_PATTERN: @@ -508,14 +509,14 @@ public class NBCLIOptions { return wantsToIncludePaths.toArray(new String[0]); } - private Map parseLogLevelOverrides(String levelsSpec) { - Map levels = new HashMap<>(); + private Map parseLogLevelOverrides(String levelsSpec) { + Map levels = new HashMap<>(); Arrays.stream(levelsSpec.split("[,;]")).forEach(kp -> { String[] ll = kp.split(":"); if (ll.length != 2) { throw new RuntimeException("Log level must have name:level format"); } - levels.put(ll[0], Level.toLevel(ll[1])); + levels.put(ll[0], ll[1]); }); return levels; } @@ -618,7 +619,7 @@ public class NBCLIOptions { return sessionName; } - public Level wantsConsoleLogLevel() { + public NBLogLevel wantsConsoleLogLevel() { return consoleLevel; } @@ -642,7 +643,7 @@ public class NBCLIOptions { public String getProgressSpec() { ProgressSpec spec = parseProgressSpec(this.progressSpec);// sanity check if (spec.indicatorMode == IndicatorMode.console) { - if (Level.INFO.isGreaterOrEqual(wantsConsoleLogLevel())) { + if (NBLogLevel.INFO.isGreaterOrEqualTo(wantsConsoleLogLevel())) { logger.warn("Console is already logging info or more, so progress data on console is suppressed."); spec.indicatorMode = IndicatorMode.logonly; } else if (this.getCommands().stream().anyMatch(cmd -> cmd.getCmdType().equals(Cmd.CmdType.script))) { @@ -677,7 +678,7 @@ public class NBCLIOptions { return logsMax; } - public String getLogsLevel() { + public NBLogLevel getScenarioLogLevel() { return logsLevel; } @@ -721,7 +722,7 @@ public class NBCLIOptions { return consoleLoggingPattern; } - public Map getLogLevelOverrides() { + public Map getLogLevelOverrides() { return logLevelsOverrides; } diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/logging/NBLogLevel.java b/nb-api/src/main/java/io/nosqlbench/nb/api/logging/NBLogLevel.java new file mode 100644 index 000000000..a726a7dc1 --- /dev/null +++ b/nb-api/src/main/java/io/nosqlbench/nb/api/logging/NBLogLevel.java @@ -0,0 +1,42 @@ +package io.nosqlbench.nb.api.logging; + +public enum NBLogLevel { + NONE(0L), + FATAL(1L << 0), + ERROR(1L << 1), + WARN(1L << 2), + INFO(1L << 3), + DEBUG(1L << 4), + TRACE(1L << 5), + ALL(1L << 30), + ; + + private final long level; + + NBLogLevel(long level) { + this.level = level; + } + + public static NBLogLevel valueOfName(String name) { + for (NBLogLevel possible : NBLogLevel.values()) { + if (name.toUpperCase().equals(possible.toString())) { + return possible; + } + } + throw new RuntimeException("Unable to find NBLogLevel for " + name); + } + + public static NBLogLevel max(NBLogLevel... levels) { + NBLogLevel max = NBLogLevel.NONE; + for (NBLogLevel level : levels) { + if (level.level > max.level) { + max = level; + } + } + return max; + } + + public boolean isGreaterOrEqualTo(NBLogLevel other) { + return level >= other.level; + } +}