Merge pull request #10588 from Eddú Meléndez

* gh-10588:
  Polish "Provide informative reason when rejecting request with invalid level"
  Provide informative reason when rejecting request with invalid level
pull/10706/head
Andy Wilkinson 7 years ago
commit 2eb0c3ba1e

@ -22,10 +22,12 @@ import org.springframework.boot.actuate.endpoint.LoggersEndpoint;
import org.springframework.boot.actuate.endpoint.LoggersEndpoint.LoggerLevels; import org.springframework.boot.actuate.endpoint.LoggersEndpoint.LoggerLevels;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.logging.LogLevel; import org.springframework.boot.logging.LogLevel;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
/** /**
* Adapter to expose {@link LoggersEndpoint} as an {@link MvcEndpoint}. * Adapter to expose {@link LoggersEndpoint} as an {@link MvcEndpoint}.
@ -68,19 +70,32 @@ public class LoggersMvcEndpoint extends EndpointMvcAdapter {
// disabled // disabled
return getDisabledResponse(); return getDisabledResponse();
} }
LogLevel logLevel = getLogLevel(configuration);
this.delegate.setLogLevel(name, logLevel);
return ResponseEntity.ok().build();
}
private LogLevel getLogLevel(Map<String, String> configuration) {
String level = configuration.get("configuredLevel");
try { try {
LogLevel logLevel = getLogLevel(configuration); return (level == null ? null : LogLevel.valueOf(level.toUpperCase()));
this.delegate.setLogLevel(name, logLevel);
return ResponseEntity.ok().build();
} }
catch (IllegalArgumentException ex) { catch (IllegalArgumentException ex) {
return ResponseEntity.badRequest().build(); throw new InvalidLogLevelException(level);
} }
} }
private LogLevel getLogLevel(Map<String, String> configuration) { /**
String level = configuration.get("configuredLevel"); * Exception thrown when the specified log level cannot be found.
return (level == null ? null : LogLevel.valueOf(level.toUpperCase())); */
@SuppressWarnings("serial")
@ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "No such log level")
public static class InvalidLogLevelException extends RuntimeException {
public InvalidLogLevelException(String level) {
super("Log level '" + level + "' is invalid");
}
} }
} }

@ -49,6 +49,7 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.WebApplicationContext;
import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
@ -174,7 +175,8 @@ public class LoggersMvcEndpointTests {
public void setLoggerWithWrongLogLevel() throws Exception { public void setLoggerWithWrongLogLevel() throws Exception {
this.mvc.perform(post("/loggers/ROOT").contentType(MediaType.APPLICATION_JSON) this.mvc.perform(post("/loggers/ROOT").contentType(MediaType.APPLICATION_JSON)
.content("{\"configuredLevel\":\"other\"}")) .content("{\"configuredLevel\":\"other\"}"))
.andExpect(status().is4xxClientError()); .andExpect(status().is4xxClientError())
.andExpect(status().reason(is("No such log level")));
verifyZeroInteractions(this.loggingSystem); verifyZeroInteractions(this.loggingSystem);
} }

Loading…
Cancel
Save