mirror of
https://github.com/nosqlbench/nosqlbench.git
synced 2026-10-12 09:24:52 -05:00
Revert "Jshook/factoring2 - logger updates (#2220)"
This reverts commit 901ca55eb5.
This commit is contained in:
1 parent
b10f4f1c60
commit
f8a07eb12c
25 files changed
+571
-546
No files matched your search
@@ -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
|
||||
|
||||
@@ -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>
|
||||
+2
-1
@@ -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]"));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
+45
-130
@@ -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>
|
||||
-2
@@ -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();
|
||||
|
||||
-189
@@ -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>
|
||||
@@ -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
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
Reference in new issue
Block a user