fixes for logger out of order init, and CmdParser pattern for single character params

This commit is contained in:
Jonathan Shook
2024-01-10 16:46:28 -06:00
parent 7f09696cb0
commit d27a347981
5 changed files with 35 additions and 28 deletions

View File

@@ -45,7 +45,7 @@ import io.nosqlbench.engine.core.lifecycle.ExecutionResult;
import io.nosqlbench.engine.core.lifecycle.process.NBCLIErrorHandler; import io.nosqlbench.engine.core.lifecycle.process.NBCLIErrorHandler;
import io.nosqlbench.engine.core.lifecycle.activity.ActivityTypeLoader; import io.nosqlbench.engine.core.lifecycle.activity.ActivityTypeLoader;
import io.nosqlbench.engine.core.lifecycle.session.NBSession; import io.nosqlbench.engine.core.lifecycle.session.NBSession;
import io.nosqlbench.engine.core.logging.LoggerConfig; import io.nosqlbench.engine.core.logging.NBLoggerConfig;
import io.nosqlbench.engine.core.metadata.MarkdownFinder; import io.nosqlbench.engine.core.metadata.MarkdownFinder;
import io.nosqlbench.nb.annotations.Service; import io.nosqlbench.nb.annotations.Service;
import io.nosqlbench.nb.annotations.ServiceSelector; import io.nosqlbench.nb.annotations.ServiceSelector;
@@ -68,13 +68,13 @@ import java.util.stream.Collectors;
public class NBCLI implements Function<String[], Integer>, NBLabeledElement { public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
private static Logger logger; private static Logger logger;
private static final LoggerConfig loggerConfig; private static final NBLoggerConfig loggerConfig;
private static final int EXIT_OK = 0; private static final int EXIT_OK = 0;
private static final int EXIT_WARNING = 1; private static final int EXIT_WARNING = 1;
private static final int EXIT_ERROR = 2; private static final int EXIT_ERROR = 2;
static { static {
loggerConfig = new LoggerConfig(); loggerConfig = new NBLoggerConfig();
ConfigurationFactory.setConfigurationFactory(NBCLI.loggerConfig); ConfigurationFactory.setConfigurationFactory(NBCLI.loggerConfig);
} }
@@ -169,9 +169,9 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
.setAnsiEnabled(globalOptions.isEnableAnsi()) .setAnsiEnabled(globalOptions.isEnableAnsi())
.setDedicatedVerificationLogger(globalOptions.isDedicatedVerificationLogger()) .setDedicatedVerificationLogger(globalOptions.isDedicatedVerificationLogger())
.activate(); .activate();
ConfigurationFactory.setConfigurationFactory(NBCLI.loggerConfig); ConfigurationFactory.setConfigurationFactory(NBCLI.loggerConfig); // THIS should be the first time log4j2 is invoked!
NBCLI.logger = LogManager.getLogger("NBCLI"); NBCLI.logger = LogManager.getLogger("NBCLI"); // TODO: Detect if the logger config was already initialized (error)
NBCLI.loggerConfig.purgeOldFiles(LogManager.getLogger("SCENARIO")); NBCLI.loggerConfig.purgeOldFiles(LogManager.getLogger("SCENARIO"));
if (NBCLI.logger.isInfoEnabled()) if (NBCLI.logger.isInfoEnabled())
NBCLI.logger.info(() -> "Configured scenario log at " + NBCLI.loggerConfig.getLogfileLocation()); NBCLI.logger.info(() -> "Configured scenario log at " + NBCLI.loggerConfig.getLogfileLocation());
@@ -185,7 +185,7 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
} }
NBCLI.logger.info(() -> "Running NoSQLBench Version " + new VersionInfo().getVersion()); NBCLI.logger.info(() -> "Running NoSQLBench Version " + new VersionInfo().getVersion());
NBCLI.logger.info(() -> "command-line: " + Arrays.stream(args).collect(Collectors.joining(" "))); NBCLI.logger.info(() -> "command-line: " + String.join(" ", args));
NBCLI.logger.info(() -> "client-hardware: " + SystemId.getHostSummary()); NBCLI.logger.info(() -> "client-hardware: " + SystemId.getHostSummary());

View File

@@ -670,16 +670,24 @@ public class NBCLIOptions {
You can discover available ways to invoke PROG by using the various --list-* commands: You can discover available ways to invoke PROG by using the various --list-* commands:
[ --list-commands, --list-scripts, --list-workloads (and --list-scenarios), --list-apps ] [ --list-commands, --list-scripts, --list-workloads (and --list-scenarios), --list-apps ]
"""
.replaceAll("ARG", cmdParam)
.replaceAll("PROG", "nb5")
.replaceAll("INCLUDES", String.join(",", wantsIncludes()))
;
final String debugMessage = """
After parsing all global options out of the command line, the remaining commands were found, After parsing all global options out of the command line, the remaining commands were found,
and mapped to valid options as describe above. This command stream was: and mapped to valid options as describe above. This command stream was:
COMMANDSTREAM COMMANDSTREAM
""" """
.replaceAll("ARG", cmdParam)
.replaceAll("PROG", "nb5")
.replaceAll("INCLUDES", String.join(",", wantsIncludes()))
.replaceAll("COMMANDSTREAM", .replaceAll("COMMANDSTREAM",
String.join(" ",arglist)); String.join(" ",arglist));
if (consoleLevel.isGreaterOrEqualTo(NBLogLevel.INFO)) {
System.out.println(debugMessage);
}
throw new BasicError(helpmsg); throw new BasicError(helpmsg);
} }

View File

@@ -32,7 +32,7 @@ import java.util.regex.Pattern;
* TODO: provide before and after atfile processing logs for diagnostics * TODO: provide before and after atfile processing logs for diagnostics
*/ */
public class NBAtFile { public class NBAtFile {
private final static Logger logger = LogManager.getLogger(NBAtFile.class); // private final static Logger logger = LogManager.getLogger(NBAtFile.class);
/** /**
* This will take a command line in raw form, which may include some arguments * This will take a command line in raw form, which may include some arguments
@@ -51,7 +51,7 @@ public class NBAtFile {
* @throws RuntimeException for any errors finding, traversing, parsing, or rendering values * @throws RuntimeException for any errors finding, traversing, parsing, or rendering values
*/ */
public static LinkedList<String> includeAt(LinkedList<String> processInPlace) { public static LinkedList<String> includeAt(LinkedList<String> processInPlace) {
logger.trace("argv stream before processing: " + String.join("|",processInPlace)); // logger.trace("argv stream before processing: " + String.join("|",processInPlace));
ListIterator<String> iter = processInPlace.listIterator(); ListIterator<String> iter = processInPlace.listIterator();
while (iter.hasNext()) { while (iter.hasNext()) {
String spec = iter.next(); String spec = iter.next();
@@ -64,7 +64,7 @@ public class NBAtFile {
} }
} }
} }
logger.trace("argv stream after atfile processing: "+ String.join("|",processInPlace)); // logger.trace("argv stream after atfile processing: "+ String.join("|",processInPlace));
return processInPlace; return processInPlace;
} }
@@ -101,7 +101,7 @@ public class NBAtFile {
NBPathsAPI.GetExtensions wantsExtension = NBIO.local().pathname(filepathSpec); NBPathsAPI.GetExtensions wantsExtension = NBIO.local().pathname(filepathSpec);
String extension = (!filepathSpec.toLowerCase().endsWith(".yaml")) ? "yaml" : ""; String extension = (!filepathSpec.toLowerCase().endsWith(".yaml")) ? "yaml" : "";
if (!extension.isEmpty()) { if (!extension.isEmpty()) {
logger.debug("adding extension 'yaml' to at-file path '" + filepathSpec + "'"); // logger.debug("adding extension 'yaml' to at-file path '" + filepathSpec + "'");
wantsExtension.extensionSet("yaml"); wantsExtension.extensionSet("yaml");
} }
Content<?> argsContent = wantsExtension.one(); Content<?> argsContent = wantsExtension.one();

View File

@@ -24,7 +24,6 @@ import java.util.*;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
/** /**
* <P>Take zero or more strings containing combined argv and return * <P>Take zero or more strings containing combined argv and return
* a single {@link Cmd} list containing zero or more commands.</P> * a single {@link Cmd} list containing zero or more commands.</P>
@@ -46,7 +45,7 @@ public class CmdParser {
private record parameter(String name, String op, String value) {} private record parameter(String name, String op, String value) {}
private record command(String name){} private record command(String name){}
private final static Pattern combinedPattern = private final static Pattern combinedPattern =
Pattern.compile("(?<varname>[a-zA-Z_][a-zA-Z0-9_.-]+)(?<operator>=+)(?<value>.+)|(?<command>[a-zA-Z_][a-zA-Z0-9_.]+)",Pattern.DOTALL); Pattern.compile("(?<varname>[a-zA-Z_][a-zA-Z0-9_.-]*)(?<operator>=+)(?<value>.+)|(?<command>[a-zA-Z_][a-zA-Z0-9_.]*)",Pattern.DOTALL);
private final static Pattern commandName =Pattern.compile("^$"); private final static Pattern commandName =Pattern.compile("^$");
public static LinkedList<Cmd> parseArgvCommands(LinkedList<String> args) { public static LinkedList<Cmd> parseArgvCommands(LinkedList<String> args) {
LinkedList<Record> cmdstructs = new LinkedList<>(); LinkedList<Record> cmdstructs = new LinkedList<>();

View File

@@ -52,7 +52,7 @@ import java.util.stream.Collectors;
* *
* @see <a href="https://logging.apache.org/log4j/2.x/manual/layouts.html#Pattern_Layout">Pattern Layout</a> * @see <a href="https://logging.apache.org/log4j/2.x/manual/layouts.html#Pattern_Layout">Pattern Layout</a>
*/ */
public class LoggerConfig extends ConfigurationFactory { public class NBLoggerConfig extends ConfigurationFactory {
public static Map<String, String> STANDARD_FORMATS = Map.of( public static Map<String, String> STANDARD_FORMATS = Map.of(
"TERSE", "%8r %-5level [%t] %-12logger{0} %msg%n%throwable", "TERSE", "%8r %-5level [%t] %-12logger{0} %msg%n%throwable",
@@ -92,25 +92,25 @@ public class LoggerConfig extends ConfigurationFactory {
private boolean isDedicatedVerificationLoggerEnabled = false; private boolean isDedicatedVerificationLoggerEnabled = false;
public LoggerConfig() { public NBLoggerConfig() {
} }
public LoggerConfig setAnsiEnabled(boolean ansiEnabled) { public NBLoggerConfig setAnsiEnabled(boolean ansiEnabled) {
this.ansiEnabled = ansiEnabled; this.ansiEnabled = ansiEnabled;
return this; return this;
} }
public LoggerConfig setConsoleLevel(NBLogLevel level) { public NBLoggerConfig setConsoleLevel(NBLogLevel level) {
this.consoleLevel = level; this.consoleLevel = level;
return this; return this;
} }
public LoggerConfig setLogfileLevel(NBLogLevel level) { public NBLoggerConfig setLogfileLevel(NBLogLevel level) {
this.fileLevel = level; this.fileLevel = level;
return this; return this;
} }
public LoggerConfig setDedicatedVerificationLogger(boolean enabled) { public NBLoggerConfig setDedicatedVerificationLogger(boolean enabled) {
this.isDedicatedVerificationLoggerEnabled = enabled; this.isDedicatedVerificationLoggerEnabled = enabled;
return this; return this;
} }
@@ -128,7 +128,7 @@ public class LoggerConfig extends ConfigurationFactory {
} }
} }
public LoggerConfig setMaxLogs(int maxLogfiles) { public NBLoggerConfig setMaxLogs(int maxLogfiles) {
this.maxLogfiles = maxLogfiles; this.maxLogfiles = maxLogfiles;
return this; return this;
} }
@@ -298,7 +298,7 @@ public class LoggerConfig extends ConfigurationFactory {
ConfigurationFactory.setConfigurationFactory(this); ConfigurationFactory.setConfigurationFactory(this);
} }
public LoggerConfig setConsolePattern(String consoleLoggingPattern) { public NBLoggerConfig setConsolePattern(String consoleLoggingPattern) {
consoleLoggingPattern = (ansiEnabled && STANDARD_FORMATS.containsKey(consoleLoggingPattern + "-ANSI")) consoleLoggingPattern = (ansiEnabled && STANDARD_FORMATS.containsKey(consoleLoggingPattern + "-ANSI"))
? consoleLoggingPattern + "-ANSI" : consoleLoggingPattern; ? consoleLoggingPattern + "-ANSI" : consoleLoggingPattern;
@@ -307,7 +307,7 @@ public class LoggerConfig extends ConfigurationFactory {
return this; return this;
} }
public LoggerConfig setLogfilePattern(String logfileLoggingPattern) { public NBLoggerConfig setLogfilePattern(String logfileLoggingPattern) {
logfileLoggingPattern = (logfileLoggingPattern.endsWith("-ANSI") && STANDARD_FORMATS.containsKey(logfileLoggingPattern)) logfileLoggingPattern = (logfileLoggingPattern.endsWith("-ANSI") && STANDARD_FORMATS.containsKey(logfileLoggingPattern))
? logfileLoggingPattern.substring(logfileLoggingPattern.length() - 5) : logfileLoggingPattern; ? logfileLoggingPattern.substring(logfileLoggingPattern.length() - 5) : logfileLoggingPattern;
@@ -315,7 +315,7 @@ public class LoggerConfig extends ConfigurationFactory {
return this; return this;
} }
public LoggerConfig setLoggerLevelOverrides(Map<String, String> logLevelOverrides) { public NBLoggerConfig setLoggerLevelOverrides(Map<String, String> logLevelOverrides) {
this.logLevelOverrides = logLevelOverrides; this.logLevelOverrides = logLevelOverrides;
return this; return this;
} }
@@ -324,12 +324,12 @@ public class LoggerConfig extends ConfigurationFactory {
return logLevelOverrides; return logLevelOverrides;
} }
public LoggerConfig setSessionName(String sessionName) { public NBLoggerConfig setSessionName(String sessionName) {
this.sessionName = sessionName; this.sessionName = sessionName;
return this; return this;
} }
public LoggerConfig purgeOldFiles(Logger logger) { public NBLoggerConfig purgeOldFiles(Logger logger) {
if (maxLogfiles == 0) { if (maxLogfiles == 0) {
logger.debug("Not purging old files, since maxLogFiles is 0."); logger.debug("Not purging old files, since maxLogFiles is 0.");
return this; return this;
@@ -384,7 +384,7 @@ public class LoggerConfig extends ConfigurationFactory {
return logfileLocation; return logfileLocation;
} }
public LoggerConfig setLogsDirectory(Path logsDirectory) { public NBLoggerConfig setLogsDirectory(Path logsDirectory) {
this.loggerDir = logsDirectory; this.loggerDir = logsDirectory;
return this; return this;
} }