diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Generate.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Generate.java index 8c4db2af9e48..ae3613c41a99 100644 --- a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Generate.java +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Generate.java @@ -17,6 +17,8 @@ package org.openapitools.codegen.cmd; +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.core.spi.FilterAttachable; import io.airlift.airline.Command; import io.airlift.airline.Option; import org.openapitools.codegen.ClientOptInput; @@ -32,6 +34,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.stream.Stream; /** * User: lanwen Date: 24.03.15 Time: 20:22 @@ -199,8 +202,23 @@ public class Generate implements Runnable { description = "Skips the default behavior of validating an input specification.") private Boolean skipValidateSpec; + @Option(name = {"--log-to-stderr"}, + title = "Log to STDERR", + description = "write all log messages (not just errors) to STDOUT." + + " Useful for piping the JSON output of debug options (e.g. `-DdebugOperations`) to an external parser directly while testing a generator.") + private Boolean logToStderr; + @Override public void run() { + if (logToStderr != null) { + LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); + Stream.of(Logger.ROOT_LOGGER_NAME, "io.swagger", "org.openapitools") + .map(lc::getLogger) + .peek(logger -> logger.detachAppender("STDOUT")) + .reduce((logger, next) -> logger.getName().equals(Logger.ROOT_LOGGER_NAME) ? logger : next) + .map(root -> root.getAppender("STDERR")) + .ifPresent(FilterAttachable::clearAllFilters); + } // attempt to read from config file CodegenConfigurator configurator = CodegenConfigurator.fromFile(configFile);