Revert "Jshook/factoring2 - logger updates (#2220)"

This reverts commit 901ca55eb5.
This commit is contained in:
Jonathan Shook committed 2025-10-02 22:46:43 +00:00
1 parent b10f4f1c60
commit f8a07eb12c
25 files changed
+571 -546

No files matched your search

-1
View File
@@ -19,7 +19,6 @@
**Note**: The `jshook/nb523` branch serves as a reference implementation showing the intended architectural changes. This `refactorings1` branch will apply those changes incrementally in a cleaner, more systematic way.
Further work on this will be after 5.25.0 is released.
---
## Executive Summary
+35 -4
View File
@@ -15,14 +15,45 @@
~ limitations under the License.
-->
<Configuration status="off" strict="true" name="nosqlbench-default">
<Configuration status="warn" strict="true" name="XMLConfigTest">
<Filter type="ThresholdFilter" level="trace"/>
<Appenders>
<Null name="noop"/>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="%7r %-5level [%t] %-12logger{0} %msg%n%throwable"/>
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
</Filters>
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n"/><!-- class and line number -->
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</Appender>
<Appender type="File" name="APPSLOG" fileName="docs/apps.log">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
</Appenders>
<Loggers>
<Root level="off">
<AppenderRef ref="noop"/>
<Logger name="StatusConsoleListener" level="trace">
<AppenderRef ref="STDOUT"/>
</Logger>
<Logger name="io.nosqlbench.docsys" level="info" additivity="false">
<AppenderRef ref="APPSLOG"/>
</Logger>
<Root level="trace">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
@@ -15,14 +15,42 @@
~ limitations under the License.
-->
<Configuration status="off" strict="true" name="nosqlbench-default">
<Configuration status="${project.test_logstatuslevel}" strict="true" name="XMLConfigTest">
<Filter type="ThresholdFilter" level="trace"/>
<Appenders>
<Null name="noop"/>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="%7r %-5level [%t] %-12logger{0} %msg%n%throwable"/>
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
</Filters>
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n"/><!-- class and line number -->
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</Appender>
<Appender type="File" name="APPSLOG" fileName="docs/apps.log">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
</Appenders>
<Loggers>
<Root level="off">
<AppenderRef ref="noop"/>
<Logger name="io.nosqlbench.docsys" level="info" additivity="false">
<AppenderRef ref="APPSLOG"/>
</Logger>
<Root level="${project.testlevel}">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
@@ -71,18 +71,20 @@ import java.util.stream.Collectors;
public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
private static Logger logger;
private static final NBLoggerConfig loggerConfig;
private static final int EXIT_OK = 0;
private static final int EXIT_WARNING = 1;
private static final int EXIT_ERROR = 2;
private static final String version;
static {
loggerConfig = new NBLoggerConfig();
ConfigurationFactory.setConfigurationFactory(NBCLI.loggerConfig);
version = new VersionInfo().getVersion();
}
private final String commandName;
private Logger logger;
private NBLoggerConfig loggerConfig;
private String sessionName;
private String sessionCode;
private long sessionTime;
@@ -119,11 +121,11 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
*
* @param args
* @return
*/
*/
@Override
public Integer apply(final String[] args) {
final NBCLI cli = new NBCLI("nb5");
try {
final NBCLI cli = new NBCLI("nb5");
final int result = cli.applyDirect(args);
return result;
} catch (final Exception e) {
@@ -134,13 +136,10 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
break;
}
cli.emitUserFacingMessage(e);
final int result = NBCLIErrorHandler.handle(e, showStackTraces, NBCLI.version);
// Commented for now, as the above handler should do everything needed.
if (result != 0) {
System.err.println("Scenario stopped due to error. See logs for details.");
}
if (result != 0) System.err.println("Scenario stopped due to error. See logs for details. Session log is '"+
NBCLI.loggerConfig.getLogfileLocation()+"'");
System.err.flush();
System.out.flush();
return result;
@@ -149,16 +148,23 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
public Integer applyDirect(final String[] args) {
// Parse command line options before initializing logging
// This ensures we have all the logging configuration ready before activating
// Initial logging config covers only command line parsing
// We don't want anything to go to console here unless it is a real problem
// as some integrations will depend on a stable and parsable program output
// new LoggerConfig()
// .setConsoleLevel(NBLogLevel.INFO.ERROR)
// .setLogfileLevel(NBLogLevel.ERROR)
// .activate();
// logger = LogManager.getLogger("NBCLI");
NBCLI.loggerConfig.setConsoleLevel(NBLogLevel.ERROR);
this.sessionTime = System.currentTimeMillis();
final NBCLIOptions globalOptions = new NBCLIOptions(args, Mode.ParseGlobalsOnly);
this.labels = globalOptions.getLabels();
this.sessionCode = SystemId.genSessionCode(sessionTime);
this.sessionName = SessionNamer.format(globalOptions.getSessionName(), sessionTime).replaceAll("SESSIONCODE", sessionCode);
// Create and configure logger with all settings at once, then activate
this.loggerConfig = new NBLoggerConfig()
NBCLI.loggerConfig
.setSessionName(sessionName)
.setConsoleLevel(globalOptions.getConsoleLogLevel())
.setConsolePattern(globalOptions.getConsoleLoggingPattern())
@@ -168,25 +174,16 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
.setMaxLogs(globalOptions.getLogsMax())
.setLogsDirectory(globalOptions.getLogsDirectory())
.setAnsiEnabled(globalOptions.isEnableAnsi())
.setDedicatedVerificationLogger(globalOptions.isDedicatedVerificationLogger());
.setDedicatedVerificationLogger(globalOptions.isDedicatedVerificationLogger())
.activate();
ConfigurationFactory.setConfigurationFactory(NBCLI.loggerConfig); // THIS should be the first time log4j2 is invoked!
// Activate initializes Log4j2 and creates log files
this.loggerConfig.activate();
// Now we can safely get loggers
this.logger = LogManager.getLogger("NBCLI");
this.loggerConfig.purgeOldFiles(LogManager.getLogger("SCENARIO"));
if (this.logger.isInfoEnabled())
this.logger.info(() -> "Configured scenario log at " + this.loggerConfig.getLogfileLocation());
else System.err.println("Configured scenario log at " + this.loggerConfig.getLogfileLocation());
Path sessionLink = this.loggerConfig.getSessionLinkPath();
if (sessionLink != null) {
if (this.logger.isInfoEnabled())
this.logger.info(() -> "Latest scenario log symlink at " + sessionLink);
else System.err.println("Latest scenario log symlink at " + sessionLink);
}
this.logger.debug("Scenario log started");
NBCLI.logger = LogManager.getLogger("NBCLI"); // TODO: Detect if the logger config was already initialized (error)
NBCLI.loggerConfig.purgeOldFiles(LogManager.getLogger("SCENARIO"));
if (NBCLI.logger.isInfoEnabled())
NBCLI.logger.info(() -> "Configured scenario log at " + NBCLI.loggerConfig.getLogfileLocation());
else System.err.println("Configured scenario log at " + NBCLI.loggerConfig.getLogfileLocation());
NBCLI.logger.debug("Scenario log started");
// Global only processing
if (0 == args.length) {
@@ -194,9 +191,9 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
return NBCLI.EXIT_OK;
}
this.logger.info(() -> "Running NoSQLBench Version " + NBCLI.version);
this.logger.info(() -> "command-line: " + String.join(" ", args));
this.logger.info(() -> "client-hardware: " + SystemId.getHostSummary());
NBCLI.logger.info(() -> "Running NoSQLBench Version " + NBCLI.version);
NBCLI.logger.info(() -> "command-line: " + String.join(" ", args));
NBCLI.logger.info(() -> "client-hardware: " + SystemId.getHostSummary());
// Invoke any bundled app which matches the name of the first non-option argument, if it exists.
@@ -206,7 +203,7 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
final BundledApp app = apploader.get().orElse(null);
if (null != app) {
final String[] appargs = Arrays.copyOfRange(args, 1, args.length);
this.logger.info(() -> "invoking bundled app '" + args[0] + "' (" + app.getClass().getSimpleName() + ").");
NBCLI.logger.info(() -> "invoking bundled app '" + args[0] + "' (" + app.getClass().getSimpleName() + ").");
globalOptions.setWantsStackTraces(true);
final int result = app.applyAsInt(appargs);
return result;
@@ -227,6 +224,7 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
}
final NBCLIOptions options = new NBCLIOptions(args, Mode.ParseAllOptions);
NBCLI.logger = LogManager.getLogger("NBCLI");
NBIO.addGlobalIncludes(options.wantsIncludes());
NBIO.setUseNBIOCache(options.wantsToUseNBIOCache());
@@ -310,7 +308,7 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
if (options.wantsToCatResource()) {
final String resourceToCat = options.wantsToCatResourceNamed();
this.logger.debug(() -> "user requests to cat " + resourceToCat);
NBCLI.logger.debug(() -> "user requests to cat " + resourceToCat);
Optional<Content<?>> tocat = NBIO.classpath()
.searchPrefixes("activities")
@@ -326,13 +324,13 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
() -> new BasicError("Unable to find " + resourceToCat + " in classpath to cat out"));
System.out.println(data.get());
this.logger.info(() -> "Dumped internal resource '" + data.asPath() + "' to stdout");
NBCLI.logger.info(() -> "Dumped internal resource '" + data.asPath() + "' to stdout");
return NBCLI.EXIT_OK;
}
if (options.wantsToCopyResource()) {
final String resourceToCopy = options.wantsToCopyResourceNamed();
this.logger.debug(() -> "user requests to copy out " + resourceToCopy);
NBCLI.logger.debug(() -> "user requests to copy out " + resourceToCopy);
Optional<Content<?>> tocopy = NBIO.classpath()
.searchPrefixes("activities")
@@ -355,7 +353,7 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
} catch (final IOException e) {
throw new BasicError("Unable to write to " + writeTo + ": " + e.getMessage());
}
this.logger.info(() -> "Copied internal resource '" + data.asPath() + "' to '" + writeTo + '\'');
NBCLI.logger.info(() -> "Copied internal resource '" + data.asPath() + "' to '" + writeTo + '\'');
return NBCLI.EXIT_OK;
}
@@ -400,7 +398,7 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
return NBCLI.EXIT_OK;
}
this.logger.debug("initializing annotators with config:'{}'", annotatorsConfig);
NBCLI.logger.debug("initializing annotators with config:'{}'", annotatorsConfig);
Annotators.init(annotatorsConfig, options.getAnnotateLabelSpec());
Annotators.recordAnnotation(
Annotation.newBuilder()
@@ -411,7 +409,7 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
.build()
);
this.logger.info(() -> "console logging level is " + options.getConsoleLogLevel());
NBCLI.logger.info(() -> "console logging level is " + options.getConsoleLogLevel());
Map<String, String> props = Map.of(
"summary", options.getReportSummaryTo(),
@@ -497,35 +495,6 @@ public class NBCLI implements Function<String[], Integer>, NBLabeledElement {
return basicHelp;
}
private void emitUserFacingMessage(Throwable error) {
String message = extractDeepestMessage(error)
.orElseGet(() -> error != null ? error.toString() : null);
emitUserVisibleMessage(message);
}
private void emitUserVisibleMessage(String message) {
if (message == null || message.isBlank()) {
return;
}
if (logger != null && logger.isErrorEnabled()) {
logger.error(message);
}
System.out.println(message);
}
private static Optional<String> extractDeepestMessage(Throwable error) {
String candidate = null;
for (Throwable current = error; current != null; current = current.getCause()) {
String message = current.getMessage();
if (message != null && !message.isBlank()) {
candidate = message;
}
}
return Optional.ofNullable(candidate);
}
@Override
public NBLabels getLabels() {
return labels;
@@ -15,14 +15,42 @@
~ limitations under the License.
-->
<Configuration status="off" strict="true" name="nosqlbench-default">
<Configuration status="warn" strict="true" name="XMLConfigTest">
<Filter type="ThresholdFilter" level="trace"/>
<Appenders>
<Null name="noop"/>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="%7r %-5level [%t] %-12logger{0} %msg%n%throwable"/>
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
</Filters>
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n"/><!-- class and line number -->
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</Appender>
<Appender type="File" name="APPSLOG" fileName="docs/apps.log">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
</Appenders>
<Loggers>
<Root level="off">
<AppenderRef ref="noop"/>
<Logger name="io.nosqlbench.docsys" level="info" additivity="false">
<AppenderRef ref="APPSLOG"/>
</Logger>
<Root level="trace">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
@@ -15,14 +15,42 @@
~ limitations under the License.
-->
<Configuration status="off" strict="true" name="nosqlbench-default">
<Configuration status="${project.test_logstatuslevel}" strict="true" name="XMLConfigTest">
<Filter type="ThresholdFilter" level="trace"/>
<Appenders>
<Null name="noop"/>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="%7r %-5level [%t] %-12logger{0} %msg%n%throwable"/>
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
</Filters>
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n"/><!-- class and line number -->
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</Appender>
<Appender type="File" name="APPSLOG" fileName="docs/apps.log">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
</Appenders>
<Loggers>
<Root level="off">
<AppenderRef ref="noop"/>
<Logger name="io.nosqlbench.docsys" level="info" additivity="false">
<AppenderRef ref="APPSLOG"/>
</Logger>
<Root level="${project.testlevel}">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
@@ -510,7 +510,8 @@ public class ActivityExecutor implements NBLabeledElement, ParameterMap.Listener
RunState maxState = state.getMaxState();
activity.setRunState(maxState);
if (maxState == RunState.Errored) {
throw new RuntimeException("Error while waiting for activity completion with states [" + tally.toString() + "]", this.exception);
throw new RuntimeException("Error while waiting for activity completion with states [" + tally.toString() + "], error=" + (this.exception!=null ?
this.exception.toString() : "[no error on activity executor]"));
}
}
@@ -18,7 +18,6 @@ package io.nosqlbench.engine.core.logging;
import io.nosqlbench.nb.api.logging.NBLogLevel;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Filter;
@@ -32,7 +31,6 @@ import org.apache.logging.log4j.core.config.ConfigurationFactory;
import org.apache.logging.log4j.core.config.ConfigurationSource;
import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder;
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder;
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory;
import org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder;
import org.apache.logging.log4j.core.config.builder.api.RootLoggerComponentBuilder;
import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;
@@ -91,7 +89,7 @@ public class NBLoggerConfig extends ConfigurationFactory {
private NBLogLevel consoleLevel = NBLogLevel.DEBUG;
private static final String DEFAULT_LOGFILE_PATTERN = "%d{DEFAULT}{GMT} [%t] %-5level: %msg%n";
private String logfilePattern = DEFAULT_LOGFILE_PATTERN;
private final String logfilePattern = DEFAULT_LOGFILE_PATTERN;
private NBLogLevel fileLevel = NBLogLevel.DEBUG;
private Map<String, String> logLevelOverrides = new LinkedHashMap<>();
@@ -101,7 +99,6 @@ public class NBLoggerConfig extends ConfigurationFactory {
private String logfileLocation;
private boolean ansiEnabled;
private boolean isDedicatedVerificationLoggerEnabled = false;
private boolean isActivated = false;
public NBLoggerConfig() {
@@ -146,7 +143,7 @@ public class NBLoggerConfig extends ConfigurationFactory {
}
BuiltConfiguration createConfiguration(final String name, ConfigurationBuilder<BuiltConfiguration> builder) {
Configuration createConfiguration(final String name, ConfigurationBuilder<BuiltConfiguration> builder) {
Level internalLoggingStatusThreshold = Level.ERROR;
Level builderThresholdLevel = Level.INFO;
@@ -166,7 +163,6 @@ public class NBLoggerConfig extends ConfigurationFactory {
RootLoggerComponentBuilder rootBuilder = builder.newRootLogger(rootLoggingLevel);
builder.setConfigurationName(name);
builder.setPackages("org.apache.logging.log4j.core");
builder.setStatusLevel(internalLoggingStatusThreshold);
@@ -284,21 +280,34 @@ public class NBLoggerConfig extends ConfigurationFactory {
});
BuiltConfiguration builtConfig = builder.build();
updateLink(logfileLocation);
return builtConfig;
}
private void updateLink(String logfileLocation) {
Path logpath = Path.of(logfileLocation);
Path logdir = Objects.requireNonNull(logpath.getParent(), "Logfile path must have a parent directory");
String basename = logpath.getFileName().toString();
String linkname = basename.replace(getSessionName() + "_", "");
Path linkPath = logdir.resolve(linkname);
Path logdir = logpath.getParent();
if (Files.exists(logpath)) {
String basename = logpath.getFileName().toString();
String linkname = basename.replace(getSessionName() + "_", "");
Path linkPath = logdir.resolve(linkname);
try {
Files.deleteIfExists(linkPath);
} catch (IOException e) {
throw new RuntimeException(e);
}
Path targetPath = Path.of(basename);
try {
Files.deleteIfExists(linkPath);
Files.createSymbolicLink(linkPath, logpath.getFileName());
} catch (IOException | UnsupportedOperationException e) {
throw new RuntimeException("Failed to create symlink for session log: " + e.getMessage(), e);
try {
Files.createSymbolicLink(
linkPath,
targetPath.getFileName()
);
} catch (IOException e) {
throw new RuntimeException(e);
}
} else {
System.out.println("Unable to find " + logfileLocation + " for symlink update");
}
}
@@ -342,105 +351,17 @@ public class NBLoggerConfig extends ConfigurationFactory {
}
public void activate() {
if (isActivated) {
throw new IllegalStateException("NBLoggerConfig has already been activated");
}
LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false);
Configuration previousConfiguration = loggerContext.getConfiguration();
boolean contextWasStarted = loggerContext.isStarted();
try {
if (!Files.exists(loggerDir)) {
try {
FileAttribute<Set<PosixFilePermission>> attrs = PosixFilePermissions.asFileAttribute(
PosixFilePermissions.fromString("rwxrwx---")
);
Files.createDirectory(loggerDir, attrs);
} catch (Exception e) {
throw new RuntimeException("Error while creating directory " + loggerDir + ": " + e.getMessage(), e);
}
}
ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
BuiltConfiguration configuration = createConfiguration("nosqlbench-logging", builder);
// Replace any existing configuration so NB settings always take effect
if (loggerContext.isStarted()) {
loggerContext.stop();
}
loggerContext.start(configuration);
// Force Log4j2 to touch appenders so backing files exist before symlink creation
Logger initLogger = LogManager.getLogger("INIT");
initLogger.info("Logger initialized");
// Mark as activated before creating symlinks since this is part of the activation process
isActivated = true;
// Now create symlinks to the log files that Log4j2 just created
createSymlinks();
} catch (Exception e) {
// If activation fails, ensure we can retry by not marking as activated
isActivated = false;
// Attempt to restore the previous configuration so logging continues working
if (!Files.exists(loggerDir)) {
try {
if (loggerContext.isStarted()) {
loggerContext.stop();
}
if (previousConfiguration != null && contextWasStarted) {
loggerContext.start(previousConfiguration);
}
} catch (Exception restoreEx) {
e.addSuppressed(restoreEx);
}
throw e;
}
}
/**
* Create symlinks to log files after Log4j2 has initialized and created the actual log files.
* This is called internally by activate() after forcing Log4j2 initialization.
* Package-private for testing.
*/
void createSymlinks() {
// Create symlink for main session log
if (logfileLocation != null) {
updateLink(logfileLocation);
}
// Create symlinks for auxiliary loggers (VERIFY, RUNTIME)
if (sessionName != null) {
Level effectiveLevel = Level.valueOf(getEffectiveFileLevel().toString());
if (isDedicatedVerificationLoggerEnabled) {
primeAuxLogger("VERIFY", effectiveLevel);
createAuxLoggerSymlink("VERIFY");
}
if (effectiveLevel.isInRange(Level.INFO, Level.TRACE)) {
primeAuxLogger("RUNTIME", effectiveLevel);
createAuxLoggerSymlink("RUNTIME");
FileAttribute<Set<PosixFilePermission>> attrs = PosixFilePermissions.asFileAttribute(
PosixFilePermissions.fromString("rwxrwx---")
);
Path directory = Files.createDirectory(loggerDir, attrs);
} catch (Exception e) {
throw new RuntimeException("Error while creating directory " + loggerDir.toString() + ": " + e.getMessage(), e);
}
}
}
private void createAuxLoggerSymlink(String loggerName) {
Path logPath = loggerDir.resolve(getFileBase() + "_" + loggerName.toLowerCase() + ".log");
Path linkPath = loggerDir.resolve(loggerName.toLowerCase() + ".log");
try {
Files.deleteIfExists(linkPath);
Files.createSymbolicLink(linkPath, logPath.getFileName());
} catch (IOException | UnsupportedOperationException e) {
throw new RuntimeException("Failed to create symlink for " + loggerName + " logger: " + e.getMessage(), e);
}
}
private void primeAuxLogger(String loggerName, Level level) {
Logger logger = LogManager.getLogger(loggerName);
logger.log(level, () -> "Logger initialized");
ConfigurationFactory.setConfigurationFactory(this);
}
public NBLoggerConfig setConsolePattern(String consoleLoggingPattern) {
@@ -453,12 +374,10 @@ public class NBLoggerConfig extends ConfigurationFactory {
}
public NBLoggerConfig setLogfilePattern(String logfileLoggingPattern) {
logfileLoggingPattern = (logfileLoggingPattern.endsWith("-ANSI") && STANDARD_FORMATS.containsKey(logfileLoggingPattern))
? logfileLoggingPattern.substring(logfileLoggingPattern.length() - 5) : logfileLoggingPattern;
if (logfileLoggingPattern.endsWith("-ANSI") && STANDARD_FORMATS.containsKey(logfileLoggingPattern)) {
logfileLoggingPattern = logfileLoggingPattern.substring(0, logfileLoggingPattern.length() - 5);
}
this.logfilePattern = STANDARD_FORMATS.getOrDefault(logfileLoggingPattern, logfileLoggingPattern);
this.logfileLocation = STANDARD_FORMATS.getOrDefault(logfileLoggingPattern, logfileLoggingPattern);
return this;
}
@@ -529,23 +448,9 @@ public class NBLoggerConfig extends ConfigurationFactory {
public String getLogfileLocation() {
if (!isActivated) {
return null;
}
return logfileLocation;
}
public Path getSessionLinkPath() {
if (!isActivated || logfileLocation == null) {
return null;
}
Path logpath = Path.of(logfileLocation);
Path logdir = Objects.requireNonNull(logpath.getParent(), "Logfile path must have a parent directory");
String basename = logpath.getFileName().toString();
String linkname = basename.replace(getSessionName() + "_", "");
return logdir.resolve(linkname);
}
public NBLoggerConfig setLogsDirectory(Path logsDirectory) {
this.loggerDir = logsDirectory;
return this;
@@ -554,6 +459,7 @@ public class NBLoggerConfig extends ConfigurationFactory {
private void attachAuxLogger(ConfigurationBuilder<BuiltConfiguration> builder, String loggerName, Level fileLevel) {
String appenderName = loggerName + (("_APPENDER").toUpperCase());
Path logPath = loggerDir.resolve(getFileBase() + "_" + loggerName.toLowerCase() + ".log");
Path linkPath = loggerDir.resolve(loggerName.toLowerCase() + ".log");
var appender = builder
.newAppender(appenderName, FileAppender.PLUGIN_NAME)
@@ -569,5 +475,14 @@ public class NBLoggerConfig extends ConfigurationFactory {
.addAttribute("additivity", false);
builder.add(appender);
builder.add(logger);
try {
Files.deleteIfExists(linkPath);
Files.createSymbolicLink(linkPath, logPath.getFileName());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
@@ -15,15 +15,42 @@
~ limitations under the License.
-->
<!-- All logging configuration for NB is configured programmatically -->
<Configuration status="off" strict="true" name="nosqlbench-default">
<Configuration status="warn" strict="true" name="XMLConfigTest">
<Filter type="ThresholdFilter" level="trace"/>
<Appenders>
<Null name="noop"/>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="%7r %-5level [%t] %-12logger{0} %msg%n%throwable"/>
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
</Filters>
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n"/><!-- class and line number -->
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</Appender>
<Appender type="File" name="APPSLOG" fileName="docs/apps.log">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
</Appenders>
<Loggers>
<Root level="off">
<AppenderRef ref="noop"/>
<Logger name="io.nosqlbench.docsys" level="info" additivity="false">
<AppenderRef ref="APPSLOG"/>
</Logger>
<Root level="trace">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
@@ -16,7 +16,6 @@
package io.nosqlbench.engine.api.activityimpl;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import java.util.Optional;
@@ -26,7 +25,6 @@ import static org.assertj.core.api.Assertions.assertThat;
public class CpuInfoTest {
@Test
@Disabled
public void testProcScanner() {
Optional<CpuInfo.ProcDetails> procDetails = CpuInfo.getProcDetails();
assertThat(procDetails).isPresent();
@@ -1,189 +0,0 @@
package io.nosqlbench.engine.core.logging;
/*
* Copyright (c) nosqlbench
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import io.nosqlbench.nb.api.logging.NBLogLevel;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.appender.FileAppender;
import org.apache.logging.log4j.core.appender.NullAppender;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.ConfigurationFactory;
import org.apache.logging.log4j.core.layout.PatternLayout;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.io.TempDir;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.nio.file.Files;
import java.nio.file.Path;
import static org.assertj.core.api.Assertions.assertThat;
@TestInstance(TestInstance.Lifecycle.PER_METHOD)
class NBLoggerConfigTest {
@TempDir
Path tempDir;
private LoggerContext loggerContext;
private Configuration originalConfiguration;
@BeforeEach
void setUp() {
loggerContext = (LoggerContext) LogManager.getContext(false);
originalConfiguration = loggerContext.getConfiguration();
assumeSymlinkSupport(tempDir);
}
@AfterEach
void tearDown() {
try {
ConfigurationFactory.resetConfigurationFactory();
} finally {
if (loggerContext != null && originalConfiguration != null) {
loggerContext.stop();
loggerContext.start(originalConfiguration);
}
}
}
@Test
void defaultConfigurationIsNoopUntilActivation() {
Configuration defaultConfig = loggerContext.getConfiguration();
assertThat(defaultConfig.getName()).isEqualTo("nosqlbench-default");
assertThat(defaultConfig.getRootLogger().getLevel()).isEqualTo(Level.OFF);
Appender noopAppender = defaultConfig.getAppender("noop");
assertThat(noopAppender).isInstanceOf(NullAppender.class);
Logger logger = LogManager.getLogger("noop-test");
assertThat(logger.isInfoEnabled()).isFalse();
assertThat(logger.isErrorEnabled()).isFalse();
NBLoggerConfig config = new NBLoggerConfig()
.setSessionName("noopuntilactivation")
.setLogsDirectory(tempDir)
.setConsoleLevel(NBLogLevel.INFO)
.setLogfileLevel(NBLogLevel.INFO);
config.activate();
Configuration activatedConfig = loggerContext.getConfiguration();
assertThat(activatedConfig.getName()).isEqualTo("nosqlbench-logging");
assertThat(activatedConfig.getRootLogger().getLevel()).isEqualTo(Level.INFO);
Appender sessionAppender = activatedConfig.getAppender(NBLoggerConfig.SESSION_APPENDER);
assertThat(sessionAppender).isInstanceOf(FileAppender.class);
assertThat(((FileAppender) sessionAppender).isStarted()).isTrue();
}
@Test
void activateAppliesCustomPatternAndReconfiguresContext() throws IOException {
NBLoggerConfig config = new NBLoggerConfig()
.setSessionName("patternsession")
.setLogsDirectory(tempDir)
.setConsoleLevel(NBLogLevel.INFO)
.setLogfileLevel(NBLogLevel.INFO)
.setLogfilePattern("%msg%n");
Configuration before = loggerContext.getConfiguration();
config.activate();
Configuration after = loggerContext.getConfiguration();
assertThat(after.getName()).isEqualTo("nosqlbench-logging");
assertThat(after).isNotSameAs(before);
Appender appender = after.getAppender(NBLoggerConfig.SESSION_APPENDER);
assertThat(appender).isInstanceOf(FileAppender.class);
FileAppender fileAppender = (FileAppender) appender;
assertThat(extractPattern(fileAppender)).isEqualTo("%msg%n");
Path sessionFile = tempDir.resolve("patternsession_session.log");
assertThat(sessionFile).exists();
Path sessionLink = tempDir.resolve("session.log");
assertThat(sessionLink).isSymbolicLink();
assertThat(Files.readSymbolicLink(sessionLink)).isEqualTo(Path.of("patternsession_session.log"));
assertThat(config.getSessionLinkPath()).isEqualTo(sessionLink);
}
@Test
void activationCreatesAuxiliarySymlinks() throws IOException {
NBLoggerConfig config = new NBLoggerConfig()
.setSessionName("symlinksession")
.setLogsDirectory(tempDir)
.setConsoleLevel(NBLogLevel.INFO)
.setLogfileLevel(NBLogLevel.DEBUG)
.setDedicatedVerificationLogger(true);
config.activate();
Path verifyLink = tempDir.resolve("verify.log");
assertThat(verifyLink).isSymbolicLink();
assertThat(Files.readSymbolicLink(verifyLink)).isEqualTo(Path.of("symlinksession_session_verify.log"));
assertThat(tempDir.resolve("symlinksession_session_verify.log")).exists();
Path runtimeLink = tempDir.resolve("runtime.log");
assertThat(runtimeLink).isSymbolicLink();
assertThat(Files.readSymbolicLink(runtimeLink)).isEqualTo(Path.of("symlinksession_session_runtime.log"));
assertThat(tempDir.resolve("symlinksession_session_runtime.log")).exists();
}
private void assumeSymlinkSupport(Path directory) {
Path probeLink = directory.resolve("symlink-probe");
try {
Files.deleteIfExists(probeLink);
Files.createSymbolicLink(probeLink, Path.of("probe-target"));
Files.deleteIfExists(probeLink);
} catch (IOException | UnsupportedOperationException | SecurityException e) {
Assumptions.assumeTrue(false, "Symlinks are not supported: " + e.getMessage());
}
}
private String extractPattern(FileAppender appender) {
PatternLayout layout = (PatternLayout) appender.getLayout();
try {
Method method = PatternLayout.class.getMethod("getConversionPattern");
Object result = method.invoke(layout);
return result == null ? null : result.toString();
} catch (NoSuchMethodException ignored) {
try {
Field field = PatternLayout.class.getDeclaredField("conversionPattern");
field.setAccessible(true);
Object value = field.get(layout);
return value == null ? null : value.toString();
} catch (NoSuchFieldException | IllegalAccessException ex) {
throw new RuntimeException("Unable to extract pattern from PatternLayout", ex);
}
} catch (IllegalAccessException | InvocationTargetException e) {
throw new RuntimeException("Unable to extract pattern from PatternLayout", e);
}
}
}
@@ -15,14 +15,42 @@
~ limitations under the License.
-->
<Configuration status="off" strict="true" name="nosqlbench-default">
<Configuration status="${project.test_logstatuslevel}" strict="true" name="XMLConfigTest">
<Filter type="ThresholdFilter" level="trace"/>
<Appenders>
<Null name="noop"/>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="%7r %-5level [%t] %-12logger{0} %msg%n%throwable"/>
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
</Filters>
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n"/><!-- class and line number -->
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</Appender>
<Appender type="File" name="APPSLOG" fileName="docs/apps.log">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
</Appenders>
<Loggers>
<Root level="off">
<AppenderRef ref="noop"/>
<Logger name="io.nosqlbench.docsys" level="info" additivity="false">
<AppenderRef ref="APPSLOG"/>
</Logger>
<Root level="${project.testlevel}">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
@@ -15,14 +15,42 @@
~ limitations under the License.
-->
<Configuration status="off" strict="true" name="nosqlbench-default">
<Configuration status="warn" strict="true" name="XMLConfigTest">
<Filter type="ThresholdFilter" level="trace"/>
<Appenders>
<Null name="noop"/>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="%7r %-5level [%t] %-12logger{0} %msg%n%throwable"/>
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
</Filters>
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n"/><!-- class and line number -->
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</Appender>
<Appender type="File" name="APPSLOG" fileName="docs/apps.log">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
</Appenders>
<Loggers>
<Root level="off">
<AppenderRef ref="noop"/>
<Logger name="io.nosqlbench.docsys" level="info" additivity="false">
<AppenderRef ref="APPSLOG"/>
</Logger>
<Root level="trace">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
@@ -15,14 +15,42 @@
~ limitations under the License.
-->
<Configuration status="off" strict="true" name="nosqlbench-default">
<Configuration status="${project.test_logstatuslevel}" strict="true" name="XMLConfigTest">
<Filter type="ThresholdFilter" level="trace"/>
<Appenders>
<Null name="noop"/>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="%7r %-5level [%t] %-12logger{0} %msg%n%throwable"/>
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
</Filters>
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n"/><!-- class and line number -->
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</Appender>
<Appender type="File" name="APPSLOG" fileName="docs/apps.log">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
</Appenders>
<Loggers>
<Root level="off">
<AppenderRef ref="noop"/>
<Logger name="io.nosqlbench.docsys" level="info" additivity="false">
<AppenderRef ref="APPSLOG"/>
</Logger>
<Root level="${project.testlevel}">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
@@ -15,14 +15,42 @@
~ limitations under the License.
-->
<Configuration status="off" strict="true" name="nosqlbench-default">
<Configuration status="${project.test_logstatuslevel}" strict="true" name="XMLConfigTest">
<Filter type="ThresholdFilter" level="trace"/>
<Appenders>
<Null name="noop"/>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="%7r %-5level [%t] %-12logger{0} %msg%n%throwable"/>
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
</Filters>
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n"/><!-- class and line number -->
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</Appender>
<Appender type="File" name="APPSLOG" fileName="docs/apps.log">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
</Appenders>
<Loggers>
<Root level="off">
<AppenderRef ref="noop"/>
<Logger name="io.nosqlbench.docsys" level="info" additivity="false">
<AppenderRef ref="APPSLOG"/>
</Logger>
<Root level="${project.testlevel}">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
@@ -15,14 +15,42 @@
~ limitations under the License.
-->
<Configuration status="off" strict="true" name="nosqlbench-default">
<Configuration status="${project.test_logstatuslevel}" strict="true" name="XMLConfigTest">
<Filter type="ThresholdFilter" level="trace"/>
<Appenders>
<Null name="noop"/>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="%7r %-5level [%t] %-12logger{0} %msg%n%throwable"/>
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
</Filters>
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n"/><!-- class and line number -->
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</Appender>
<Appender type="File" name="APPSLOG" fileName="docs/apps.log">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
</Appenders>
<Loggers>
<Root level="off">
<AppenderRef ref="noop"/>
<Logger name="io.nosqlbench.docsys" level="info" additivity="false">
<AppenderRef ref="APPSLOG"/>
</Logger>
<Root level="${project.testlevel}">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
+3 -3
View File
@@ -41,11 +41,11 @@ fi
if [ "$1" = "-DN" ]
then
shift
exec $DIR/jre/bin/java --enable-native-access=ALL-UNNAMED --enable-preview -XX:+UseZGC ${JAVA_OPTS} -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar $DIR/nb5.jar "$@"
exec $DIR/jre/bin/java --enable-preview -XX:+UseZGC ${JAVA_OPTS} -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar $DIR/nb5.jar "$@"
elif [ "$1" = "-DY" ]
then
shift
exec $DIR/jre/bin/java --enable-native-access=ALL-UNNAMED --enable-preview -XX:+UseZGC ${JAVA_OPTS} -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005 -jar $DIR/nb5.jar "$@"
exec $DIR/jre/bin/java --enable-preview -XX:+UseZGC ${JAVA_OPTS} -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005 -jar $DIR/nb5.jar "$@"
else
exec $DIR/jre/bin/java --enable-native-access=ALL-UNNAMED --enable-preview -XX:+UseZGC ${JAVA_OPTS} -jar $DIR/nb5.jar "$@"
exec $DIR/jre/bin/java --enable-preview -XX:+UseZGC ${JAVA_OPTS} -jar $DIR/nb5.jar "$@"
fi
+14 -31
View File
@@ -65,47 +65,30 @@
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.1</version>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
<archive>
<manifest>
<mainClass>io.nosqlbench.engine.cli.NBCLI</mainClass>
<manifestEntries>
<Multi-Release>true</Multi-Release>
</manifestEntries>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
<transformer implementation="org.apache.logging.log4j.maven.plugins.shade.transformer.Log4j2PluginCacheFileTransformer"/>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<finalName>nb5-${project.version}-jar-with-dependencies</finalName>
</manifest>
<manifestEntries>
<Multi-Release>true</Multi-Release>
</manifestEntries>
</archive>
</configuration>
<executions>
<execution>
<id>assemble-nb</id>
<phase>package</phase>
<goals>
<goal>shade</goal>
<goal>single</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-transform-maven-shade-plugin-extensions</artifactId>
<version>0.1.0</version>
</dependency>
</dependencies>
</plugin>
<plugin>
-28
View File
@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (c) nosqlbench
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<Configuration status="off" strict="true" name="nosqlbench-default">
<Appenders>
<Null name="noop"/>
</Appenders>
<Loggers>
<Root level="off">
<AppenderRef ref="noop"/>
</Root>
</Loggers>
</Configuration>
+32 -4
View File
@@ -15,14 +15,42 @@
~ limitations under the License.
-->
<Configuration status="off" strict="true" name="nosqlbench-default">
<Configuration status="warn" strict="true" name="XMLConfigTest">
<Filter type="ThresholdFilter" level="trace"/>
<Appenders>
<Null name="noop"/>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="%7r %-5level [%t] %-12logger{0} %msg%n%throwable"/>
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
</Filters>
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n"/><!-- class and line number -->
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</Appender>
<Appender type="File" name="APPSLOG" fileName="docs/apps.log">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
</Appenders>
<Loggers>
<Root level="off">
<AppenderRef ref="noop"/>
<Logger name="io.nosqlbench.docsys" level="info" additivity="false">
<AppenderRef ref="APPSLOG"/>
</Logger>
<Root level="trace">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
+32 -4
View File
@@ -15,14 +15,42 @@
~ limitations under the License.
-->
<Configuration status="off" strict="true" name="nosqlbench-default">
<Configuration status="${project.test_logstatuslevel}" strict="true" name="XMLConfigTest">
<Filter type="ThresholdFilter" level="trace"/>
<Appenders>
<Null name="noop"/>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="%7r %-5level [%t] %-12logger{0} %msg%n%throwable"/>
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
</Filters>
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n"/><!-- class and line number -->
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</Appender>
<Appender type="File" name="APPSLOG" fileName="docs/apps.log">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
</Appenders>
<Loggers>
<Root level="off">
<AppenderRef ref="noop"/>
<Logger name="io.nosqlbench.docsys" level="info" additivity="false">
<AppenderRef ref="APPSLOG"/>
</Logger>
<Root level="${project.testlevel}">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
+3 -3
View File
@@ -41,11 +41,11 @@ fi
if [ "$1" = "-DN" ]
then
shift
exec $DIR/jre/bin/java --enable-native-access=ALL-UNNAMED --enable-preview -XX:+UseZGC ${JAVA_OPTS} -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar $DIR/nbr.jar "$@"
exec $DIR/jre/bin/java --enable-preview -XX:+UseZGC ${JAVA_OPTS} -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar $DIR/nbr.jar "$@"
elif [ "$1" = "-DY" ]
then
shift
exec $DIR/jre/bin/java --enable-native-access=ALL-UNNAMED --enable-preview -XX:+UseZGC ${JAVA_OPTS} -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005 -jar $DIR/nbr.jar "$@"
exec $DIR/jre/bin/java --enable-preview -XX:+UseZGC ${JAVA_OPTS} -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005 -jar $DIR/nbr.jar "$@"
else
exec $DIR/jre/bin/java --enable-native-access=ALL-UNNAMED --enable-preview -XX:+UseZGC ${JAVA_OPTS} -jar $DIR/nbr.jar "$@"
exec $DIR/jre/bin/java --enable-preview -XX:+UseZGC ${JAVA_OPTS} -jar $DIR/nbr.jar "$@"
fi
+14 -31
View File
@@ -84,47 +84,30 @@
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.1</version>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
<archive>
<manifest>
<mainClass>io.nosqlbench.engine.cli.NBCLI</mainClass>
<manifestEntries>
<Multi-Release>true</Multi-Release>
</manifestEntries>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
<transformer implementation="org.apache.logging.log4j.maven.plugins.shade.transformer.Log4j2PluginCacheFileTransformer"/>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<finalName>nbr-${project.version}-jar-with-dependencies</finalName>
</manifest>
<manifestEntries>
<Multi-Release>true</Multi-Release>
</manifestEntries>
</archive>
</configuration>
<executions>
<execution>
<id>assemble-nb</id>
<phase>package</phase>
<goals>
<goal>shade</goal>
<goal>single</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-transform-maven-shade-plugin-extensions</artifactId>
<version>0.1.0</version>
</dependency>
</dependencies>
</plugin>
<plugin>
+32 -4
View File
@@ -15,14 +15,42 @@
~ limitations under the License.
-->
<Configuration status="off" strict="true" name="nosqlbench-default">
<Configuration status="warn" strict="true" name="XMLConfigTest">
<Filter type="ThresholdFilter" level="trace"/>
<Appenders>
<Null name="noop"/>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="%7r %-5level [%t] %-12logger{0} %msg%n%throwable"/>
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
</Filters>
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n"/><!-- class and line number -->
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</Appender>
<Appender type="File" name="APPSLOG" fileName="docs/apps.log">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
</Appenders>
<Loggers>
<Root level="off">
<AppenderRef ref="noop"/>
<Logger name="io.nosqlbench.docsys" level="info" additivity="false">
<AppenderRef ref="APPSLOG"/>
</Logger>
<Root level="trace">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
+32 -4
View File
@@ -15,14 +15,42 @@
~ limitations under the License.
-->
<Configuration status="off" strict="true" name="nosqlbench-default">
<Configuration status="${project.test_logstatuslevel}" strict="true" name="XMLConfigTest">
<Filter type="ThresholdFilter" level="trace"/>
<Appenders>
<Null name="noop"/>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="%7r %-5level [%t] %-12logger{0} %msg%n%throwable"/>
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
</Filters>
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n"/><!-- class and line number -->
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</Appender>
<Appender type="File" name="APPSLOG" fileName="docs/apps.log">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
</Appenders>
<Loggers>
<Root level="off">
<AppenderRef ref="noop"/>
<Logger name="io.nosqlbench.docsys" level="info" additivity="false">
<AppenderRef ref="APPSLOG"/>
</Logger>
<Root level="${project.testlevel}">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>