Add status and error messages to /trace

[Fixes #57949108] [bs-323] Make sure /trace shows error responses
This commit is contained in:
Dave Syer
2013-10-01 14:48:07 -04:00
parent 1bdb2ce1c2
commit f7fa63bcb4
4 changed files with 79 additions and 10 deletions

View File

@@ -23,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.actuate.trace.TraceRepository;
import org.springframework.boot.actuate.trace.WebRequestTraceFilter;
import org.springframework.boot.actuate.web.BasicErrorController;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -42,6 +43,9 @@ public class TraceWebFilterAutoConfiguration {
@Autowired
private TraceRepository traceRepository;
@Autowired(required = false)
private BasicErrorController errorController;
@Value("${management.dump_requests:false}")
private boolean dumpRequests;
@@ -49,6 +53,9 @@ public class TraceWebFilterAutoConfiguration {
public WebRequestTraceFilter webRequestLoggingFilter(BeanFactory beanFactory) {
WebRequestTraceFilter filter = new WebRequestTraceFilter(this.traceRepository);
filter.setDumpRequests(this.dumpRequests);
if (this.errorController != null) {
filter.setErrorController(this.errorController);
}
return filter;
}

View File

@@ -34,6 +34,7 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.boot.actuate.web.BasicErrorController;
import org.springframework.core.Ordered;
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -56,6 +57,8 @@ public class WebRequestTraceFilter implements Filter, Ordered {
private ObjectMapper objectMapper = new ObjectMapper();
private BasicErrorController errorController;
/**
* @param traceRepository
*/
@@ -122,6 +125,7 @@ public class WebRequestTraceFilter implements Filter, Ordered {
String value = response.getHeader(header);
headers.put(header, value);
}
headers.put("status", "" + response.getStatus());
@SuppressWarnings("unchecked")
Map<String, Object> allHeaders = (Map<String, Object>) trace.get("headers");
allHeaders.put("response", headers);
@@ -151,6 +155,13 @@ public class WebRequestTraceFilter implements Filter, Ordered {
trace.put("method", request.getMethod());
trace.put("path", request.getRequestURI());
trace.put("headers", allHeaders);
Throwable error = (Throwable) request
.getAttribute("javax.servlet.error.exception");
if (error != null) {
if (this.errorController != null) {
trace.put("error", this.errorController.error(request));
}
}
return trace;
}
@@ -162,4 +173,8 @@ public class WebRequestTraceFilter implements Filter, Ordered {
public void destroy() {
}
public void setErrorController(BasicErrorController errorController) {
this.errorController = errorController;
}
}