generalize log level to NB

This commit is contained in:
Jonathan Shook 2020-11-16 17:28:10 -06:00
parent a97db87f84
commit 897a8389c9
3 changed files with 58 additions and 14 deletions

View File

@ -21,6 +21,7 @@ import io.nosqlbench.nb.api.annotation.Annotator;
import io.nosqlbench.nb.api.content.Content; import io.nosqlbench.nb.api.content.Content;
import io.nosqlbench.nb.api.content.NBIO; import io.nosqlbench.nb.api.content.NBIO;
import io.nosqlbench.nb.api.errors.BasicError; 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.nb.api.markdown.exporter.MarkdownExporter;
import io.nosqlbench.virtdata.userlibs.apps.VirtDataMainApp; import io.nosqlbench.virtdata.userlibs.apps.VirtDataMainApp;
import org.slf4j.Logger; import org.slf4j.Logger;

View File

@ -108,7 +108,7 @@ public class NBCLIOptions {
private String wantsMetricsForActivity; private String wantsMetricsForActivity;
private String sessionName = ""; private String sessionName = "";
private boolean showScript = false; private boolean showScript = false;
private Level consoleLevel = Level.WARN; private NBLogLevel consoleLevel = NBLogLevel.WARN;
private final List<String> histoLoggerConfigs = new ArrayList<>(); private final List<String> histoLoggerConfigs = new ArrayList<>();
private final List<String> statsLoggerConfigs = new ArrayList<>(); private final List<String> statsLoggerConfigs = new ArrayList<>();
private final List<String> classicHistoConfigs = new ArrayList<>(); private final List<String> classicHistoConfigs = new ArrayList<>();
@ -120,8 +120,8 @@ public class NBCLIOptions {
private String[] rleDumpOptions = new String[0]; private String[] rleDumpOptions = new String[0];
private String[] cyclelogImportOptions = new String[0]; private String[] cyclelogImportOptions = new String[0];
private String consoleLoggingPattern = DEFAULT_CONSOLE_LOGGING_PATTERN; private String consoleLoggingPattern = DEFAULT_CONSOLE_LOGGING_PATTERN;
private String logsLevel = "INFO"; private NBLogLevel logsLevel = NBLogLevel.INFO;
private Map<String, Level> logLevelsOverrides = new HashMap<>(); private Map<String, String> logLevelsOverrides = new HashMap<>();
private boolean enableChart = false; private boolean enableChart = false;
private boolean dockerMetrics = false; private boolean dockerMetrics = false;
private boolean wantsScenariosList = false; private boolean wantsScenariosList = false;
@ -393,7 +393,8 @@ public class NBCLIOptions {
break; break;
case LOGS_LEVEL: case LOGS_LEVEL:
arglist.removeFirst(); arglist.removeFirst();
logsLevel = readWordOrThrow(arglist, "a log level"); String loglevel = readWordOrThrow(arglist, "a log level");
this.logsLevel = NBLogLevel.valueOfName(loglevel);
break; break;
case LOG_LEVEL_OVERRIDE: case LOG_LEVEL_OVERRIDE:
arglist.removeFirst(); arglist.removeFirst();
@ -464,15 +465,15 @@ public class NBCLIOptions {
wantsMarkerTypes = true; wantsMarkerTypes = true;
break; break;
case DASH_V_INFO: case DASH_V_INFO:
consoleLevel = Level.INFO; consoleLevel = NBLogLevel.INFO;
arglist.removeFirst(); arglist.removeFirst();
break; break;
case DASH_VV_DEBUG: case DASH_VV_DEBUG:
consoleLevel = Level.DEBUG; consoleLevel = NBLogLevel.DEBUG;
arglist.removeFirst(); arglist.removeFirst();
break; break;
case DASH_VVV_TRACE: case DASH_VVV_TRACE:
consoleLevel = Level.TRACE; consoleLevel = NBLogLevel.TRACE;
arglist.removeFirst(); arglist.removeFirst();
break; break;
case WITH_LOGGING_PATTERN: case WITH_LOGGING_PATTERN:
@ -508,14 +509,14 @@ public class NBCLIOptions {
return wantsToIncludePaths.toArray(new String[0]); return wantsToIncludePaths.toArray(new String[0]);
} }
private Map<String, Level> parseLogLevelOverrides(String levelsSpec) { private Map<String, String> parseLogLevelOverrides(String levelsSpec) {
Map<String, Level> levels = new HashMap<>(); Map<String, String> levels = new HashMap<>();
Arrays.stream(levelsSpec.split("[,;]")).forEach(kp -> { Arrays.stream(levelsSpec.split("[,;]")).forEach(kp -> {
String[] ll = kp.split(":"); String[] ll = kp.split(":");
if (ll.length != 2) { if (ll.length != 2) {
throw new RuntimeException("Log level must have name:level format"); 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; return levels;
} }
@ -618,7 +619,7 @@ public class NBCLIOptions {
return sessionName; return sessionName;
} }
public Level wantsConsoleLogLevel() { public NBLogLevel wantsConsoleLogLevel() {
return consoleLevel; return consoleLevel;
} }
@ -642,7 +643,7 @@ public class NBCLIOptions {
public String getProgressSpec() { public String getProgressSpec() {
ProgressSpec spec = parseProgressSpec(this.progressSpec);// sanity check ProgressSpec spec = parseProgressSpec(this.progressSpec);// sanity check
if (spec.indicatorMode == IndicatorMode.console) { 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."); logger.warn("Console is already logging info or more, so progress data on console is suppressed.");
spec.indicatorMode = IndicatorMode.logonly; spec.indicatorMode = IndicatorMode.logonly;
} else if (this.getCommands().stream().anyMatch(cmd -> cmd.getCmdType().equals(Cmd.CmdType.script))) { } else if (this.getCommands().stream().anyMatch(cmd -> cmd.getCmdType().equals(Cmd.CmdType.script))) {
@ -677,7 +678,7 @@ public class NBCLIOptions {
return logsMax; return logsMax;
} }
public String getLogsLevel() { public NBLogLevel getScenarioLogLevel() {
return logsLevel; return logsLevel;
} }
@ -721,7 +722,7 @@ public class NBCLIOptions {
return consoleLoggingPattern; return consoleLoggingPattern;
} }
public Map<String, Level> getLogLevelOverrides() { public Map<String, String> getLogLevelOverrides() {
return logLevelsOverrides; return logLevelsOverrides;
} }

View File

@ -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;
}
}