Reinstate devtools debug logging with opt-out

Reinstate `web` logging when devtools is in use, making use of the new
logging groups support. Devtools now also logs an `INFO` message
informing that properties defaults are offers an easy way to disable
them.

Closes gh-14450
pull/14471/head
Phillip Webb 6 years ago
parent c4caf2705a
commit cef635d86c

@ -20,7 +20,10 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.devtools.logger.DevToolsLogFactory;
import org.springframework.boot.devtools.restart.Restarter;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.Ordered;
@ -28,7 +31,6 @@ import org.springframework.core.annotation.Order;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.Environment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.PropertySource;
/**
* {@link EnvironmentPostProcessor} to add properties that make sense when working at
@ -42,33 +44,40 @@ import org.springframework.core.env.PropertySource;
@Order(Ordered.LOWEST_PRECEDENCE)
public class DevToolsPropertyDefaultsPostProcessor implements EnvironmentPostProcessor {
private static final Log logger = DevToolsLogFactory
.getLog(DevToolsPropertyDefaultsPostProcessor.class);
private static final String ENABLED = "spring.devtools.add-properties";
private static final Map<String, Object> PROPERTIES;
static {
Map<String, Object> devToolsProperties = new HashMap<>();
devToolsProperties.put("spring.thymeleaf.cache", "false");
devToolsProperties.put("spring.freemarker.cache", "false");
devToolsProperties.put("spring.groovy.template.cache", "false");
devToolsProperties.put("spring.mustache.cache", "false");
devToolsProperties.put("server.servlet.session.persistent", "true");
devToolsProperties.put("spring.h2.console.enabled", "true");
devToolsProperties.put("spring.resources.cache.period", "0");
devToolsProperties.put("spring.resources.chain.cache", "false");
devToolsProperties.put("spring.template.provider.cache", "false");
devToolsProperties.put("spring.mvc.log-resolved-exception", "true");
devToolsProperties.put("server.error.include-stacktrace", "ALWAYS");
devToolsProperties.put("server.servlet.jsp.init-parameters.development", "true");
devToolsProperties.put("spring.reactor.stacktrace-mode.enabled", "true");
PROPERTIES = Collections.unmodifiableMap(devToolsProperties);
Map<String, Object> properties = new HashMap<>();
properties.put("spring.thymeleaf.cache", "false");
properties.put("spring.freemarker.cache", "false");
properties.put("spring.groovy.template.cache", "false");
properties.put("spring.mustache.cache", "false");
properties.put("server.servlet.session.persistent", "true");
properties.put("spring.h2.console.enabled", "true");
properties.put("spring.resources.cache.period", "0");
properties.put("spring.resources.chain.cache", "false");
properties.put("spring.template.provider.cache", "false");
properties.put("spring.mvc.log-resolved-exception", "true");
properties.put("server.error.include-stacktrace", "ALWAYS");
properties.put("server.servlet.jsp.init-parameters.development", "true");
properties.put("spring.reactor.stacktrace-mode.enabled", "true");
properties.put("logging.level.web", "debug");
PROPERTIES = Collections.unmodifiableMap(properties);
}
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment,
SpringApplication application) {
if (isLocalApplication(environment) && canAddProperties(environment)) {
PropertySource<?> propertySource = new MapPropertySource("refresh",
PROPERTIES);
environment.getPropertySources().addLast(propertySource);
logger.info("Devtools property and logging defaults active! Set '" + ENABLED
+ "' to 'false' to disable");
environment.getPropertySources()
.addLast(new MapPropertySource("devtools", PROPERTIES));
}
}
@ -77,7 +86,10 @@ public class DevToolsPropertyDefaultsPostProcessor implements EnvironmentPostPro
}
private boolean canAddProperties(Environment environment) {
return isRestarterInitialized() || isRemoteRestartEnabled(environment);
if (environment.getProperty(ENABLED, Boolean.class, true)) {
return isRestarterInitialized() || isRemoteRestartEnabled(environment);
}
return false;
}
private boolean isRestarterInitialized() {

@ -19,6 +19,12 @@
"reason": "Remote debug is no longer supported.",
"level": "error"
}
},
{
"name": "spring.devtools.add-properties",
"type": "java.lang.Boolean",
"description": "Whether to enable devtool property defaults.",
"defaultValue": true
}
]
}
}

@ -783,6 +783,16 @@ For example, Thymeleaf offers the `spring.thymeleaf.cache` property. Rather than
to set these properties manually, the `spring-boot-devtools` module automatically applies
sensible development-time configuration.
Because you need more information about web requests while developing Spring MVC and
Spring WebFlux applications, developer tools will enable `DEBUG` logging for the `web`
logging group. This will give you information about the incoming request, which handler is
processing it, the response outcome, etc. If you wish to log all request details
(including potentially sensitive information), you can turn on the
`spring.http.log-request-details` configuration property.
NOTE: If you don't want property defaults to be applied you can set
`spring.devtools.add-properties` to `false` in your `application.properties`.
TIP: For a complete list of the properties that are applied by the devtools, see
{sc-spring-boot-devtools}/env/DevToolsPropertyDefaultsPostProcessor.{sc-ext}[DevToolsPropertyDefaultsPostProcessor].

Loading…
Cancel
Save