in compat/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java [477:594]
void logging(CliRequest cliRequest) throws ExitException {
// LOG LEVEL
CommandLine commandLine = cliRequest.commandLine;
cliRequest.verbose = commandLine.hasOption(CLIManager.VERBOSE) || commandLine.hasOption(CLIManager.DEBUG);
cliRequest.quiet = !cliRequest.verbose && commandLine.hasOption(CLIManager.QUIET);
cliRequest.showErrors = cliRequest.verbose || commandLine.hasOption(CLIManager.ERRORS);
// LOG COLOR
String styleColor = cliRequest.getUserProperties().getProperty("style.color", "auto");
styleColor = cliRequest.getUserProperties().getProperty(Constants.MAVEN_STYLE_COLOR_PROPERTY, styleColor);
styleColor = commandLine.getOptionValue(CLIManager.COLOR, styleColor);
if ("always".equals(styleColor) || "yes".equals(styleColor) || "force".equals(styleColor)) {
MessageUtils.setColorEnabled(true);
} else if ("never".equals(styleColor) || "no".equals(styleColor) || "none".equals(styleColor)) {
MessageUtils.setColorEnabled(false);
} else if (!"auto".equals(styleColor) && !"tty".equals(styleColor) && !"if-tty".equals(styleColor)) {
throw new IllegalArgumentException(
"Invalid color configuration value '" + styleColor + "'. Supported are 'auto', 'always', 'never'.");
} else {
boolean isBatchMode = !commandLine.hasOption(CLIManager.FORCE_INTERACTIVE)
&& (commandLine.hasOption(CLIManager.BATCH_MODE)
|| commandLine.hasOption(CLIManager.NON_INTERACTIVE));
if (isBatchMode || commandLine.hasOption(CLIManager.LOG_FILE)) {
MessageUtils.setColorEnabled(false);
}
}
slf4jLoggerFactory = LoggerFactory.getILoggerFactory();
Slf4jConfiguration slf4jConfiguration = Slf4jConfigurationFactory.getConfiguration(slf4jLoggerFactory);
if (cliRequest.verbose) {
cliRequest.request.setLoggingLevel(MavenExecutionRequest.LOGGING_LEVEL_DEBUG);
slf4jConfiguration.setRootLoggerLevel(Slf4jConfiguration.Level.DEBUG);
} else if (cliRequest.quiet) {
cliRequest.request.setLoggingLevel(MavenExecutionRequest.LOGGING_LEVEL_ERROR);
slf4jConfiguration.setRootLoggerLevel(Slf4jConfiguration.Level.ERROR);
}
// else fall back to default log level specified in conf
// see https://issues.apache.org/jira/browse/MNG-2570
// LOG STREAMS
if (commandLine.hasOption(CLIManager.LOG_FILE)) {
File logFile = new File(commandLine.getOptionValue(CLIManager.LOG_FILE));
logFile = ResolveFile.resolveFile(logFile, cliRequest.workingDirectory);
// redirect stdout and stderr to file
try {
PrintStream ps = new PrintStream(new FileOutputStream(logFile));
System.setOut(ps);
System.setErr(ps);
} catch (FileNotFoundException e) {
//
// Ignore
//
}
}
slf4jConfiguration.activate();
plexusLoggerManager = new Slf4jLoggerManager();
slf4jLogger = slf4jLoggerFactory.getLogger(this.getClass().getName());
if (commandLine.hasOption(CLIManager.FAIL_ON_SEVERITY)) {
String logLevelThreshold = commandLine.getOptionValue(CLIManager.FAIL_ON_SEVERITY);
if (slf4jLoggerFactory instanceof LogLevelRecorder recorder) {
LogLevelRecorder.Level level =
switch (logLevelThreshold.toLowerCase(Locale.ENGLISH)) {
case "warn", "warning" -> LogLevelRecorder.Level.WARN;
case "error" -> LogLevelRecorder.Level.ERROR;
default -> throw new IllegalArgumentException(
logLevelThreshold
+ " is not a valid log severity threshold. Valid severities are WARN/WARNING and ERROR.");
};
recorder.setMaxLevelAllowed(level);
slf4jLogger.info("Enabled to break the build on log level {}.", logLevelThreshold);
} else {
slf4jLogger.warn(
"Expected LoggerFactory to be of type '{}', but found '{}' instead. "
+ "The --fail-on-severity flag will not take effect.",
LogLevelRecorder.class.getName(),
slf4jLoggerFactory.getClass().getName());
}
}
// check for presence of deprecated options and print warning
boolean fail = false;
for (Option option : cliRequest.commandLine.getOptions()) {
if (option.isDeprecated()) {
StringBuilder sb = new StringBuilder();
sb.append("The option -").append(option.getOpt());
if (option.getLongOpt() != null) {
sb.append(",--").append(option.getLongOpt());
}
sb.append(" is deprecated ");
if (option.getDeprecated().isForRemoval()) {
sb.append("and will be removed in a future version");
}
if (option.getDeprecated().getSince() != null) {
sb.append("since Maven ").append(option.getDeprecated().getSince());
}
boolean error = false;
if (option.getDeprecated().getDescription() != null) {
sb.append(": ").append(option.getDeprecated().getDescription());
error = option.getDeprecated().getDescription().startsWith("UNSUPPORTED:");
}
if (error) {
slf4jLogger.error(sb.toString());
fail = true;
} else {
slf4jLogger.warn(sb.toString());
}
}
}
if (fail) {
throw new ExitException(1);
}
}