Refine logging for async requests
Issue: SPR-16898
This commit is contained in:
@@ -530,7 +530,7 @@ public class DispatcherServlet extends FrameworkServlet {
|
||||
initViewResolvers(context);
|
||||
initFlashMapManager(context);
|
||||
|
||||
if (logger.isDebugEnabled() || logger.isTraceEnabled()) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
if (this.disableLoggingRequestDetails) {
|
||||
logger.debug("Logging request parameters and headers is OFF.");
|
||||
}
|
||||
@@ -988,7 +988,7 @@ public class DispatcherServlet extends FrameworkServlet {
|
||||
}
|
||||
|
||||
private void logRequest(HttpServletRequest request) {
|
||||
if (logger.isDebugEnabled() || logger.isTraceEnabled()) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
|
||||
String params = "";
|
||||
if (!this.disableLoggingRequestDetails) {
|
||||
@@ -998,9 +998,9 @@ public class DispatcherServlet extends FrameworkServlet {
|
||||
}
|
||||
|
||||
String dispatchType = !request.getDispatcherType().equals(DispatcherType.REQUEST) ?
|
||||
" [" + request.getDispatcherType().name() + "]" : "";
|
||||
"\"" + request.getDispatcherType().name() + "\" dispatch for " : "";
|
||||
|
||||
String message = request.getMethod() + " " + getRequestUri(request) + dispatchType + params;
|
||||
String message = dispatchType + request.getMethod() + " \"" + getRequestUri(request) + "\"" + params;
|
||||
|
||||
if (logger.isTraceEnabled()) {
|
||||
String headers = "";
|
||||
|
||||
@@ -21,6 +21,7 @@ import java.security.Principal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Callable;
|
||||
import javax.servlet.DispatcherType;
|
||||
import javax.servlet.ServletContext;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
@@ -990,16 +991,32 @@ public abstract class FrameworkServlet extends HttpServletBean implements Applic
|
||||
}
|
||||
|
||||
if (logger.isDebugEnabled()) {
|
||||
boolean isRequestDispatch = request.getDispatcherType().equals(DispatcherType.REQUEST);
|
||||
String dispatchType = request.getDispatcherType().name();
|
||||
if (failureCause != null) {
|
||||
this.logger.debug("Failed to complete request: ", failureCause);
|
||||
if (!isRequestDispatch) {
|
||||
logger.debug("Unresolved failure from \"" + dispatchType + "\" dispatch: " + failureCause);
|
||||
}
|
||||
else if (logger.isTraceEnabled()) {
|
||||
logger.trace("Failed to complete request", failureCause);
|
||||
}
|
||||
else {
|
||||
logger.debug("Failed to complete request: " + failureCause);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (asyncManager.isConcurrentHandlingStarted()) {
|
||||
logger.debug("Exiting, but response remains open for further handling");
|
||||
logger.debug("Exiting but response remains open for further handling");
|
||||
}
|
||||
else if (logger.isDebugEnabled()) {
|
||||
HttpStatus status = HttpStatus.resolve(response.getStatus());
|
||||
logger.debug("Completed " + (status != null ? status : response.getStatus()));
|
||||
else {
|
||||
int status = response.getStatus();
|
||||
if (!isRequestDispatch) {
|
||||
logger.debug("Exiting from \"" + dispatchType + "\" dispatch (status " + status + ")");
|
||||
}
|
||||
else {
|
||||
HttpStatus httpStatus = HttpStatus.resolve(status);
|
||||
logger.debug("Completed " + (httpStatus != null ? httpStatus : status));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.servlet.DispatcherType;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
@@ -379,7 +380,7 @@ public abstract class AbstractHandlerMapping extends WebApplicationObjectSupport
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace("Mapped to " + handler);
|
||||
}
|
||||
else if (logger.isDebugEnabled()) {
|
||||
else if (logger.isDebugEnabled() && !request.getDispatcherType().equals(DispatcherType.ASYNC)) {
|
||||
logger.debug("Mapped to " + executionChain.getHandler());
|
||||
}
|
||||
|
||||
|
||||
@@ -211,12 +211,9 @@ class ReactiveTypeHandler {
|
||||
@Override
|
||||
public final void onSubscribe(Subscription subscription) {
|
||||
this.subscription = subscription;
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace("Subscribed to Publisher for " + this.emitter);
|
||||
}
|
||||
this.emitter.onTimeout(() -> {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Connection timeout for " + this.emitter);
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace("Connection timeout for " + this.emitter);
|
||||
}
|
||||
terminate();
|
||||
this.emitter.complete();
|
||||
@@ -284,8 +281,8 @@ class ReactiveTypeHandler {
|
||||
this.subscription.request(1);
|
||||
}
|
||||
catch (final Throwable ex) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Send error for " + this.emitter, ex);
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace("Send for " + this.emitter + " failed: " + ex);
|
||||
}
|
||||
terminate();
|
||||
return;
|
||||
@@ -297,14 +294,14 @@ class ReactiveTypeHandler {
|
||||
Throwable ex = this.error;
|
||||
this.error = null;
|
||||
if (ex != null) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Publisher error for " + this.emitter, ex);
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace("Publisher for " + this.emitter + " failed: " + ex);
|
||||
}
|
||||
this.emitter.completeWithError(ex);
|
||||
}
|
||||
else {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Publisher completed for " + this.emitter);
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace("Publisher for " + this.emitter + " completed");
|
||||
}
|
||||
this.emitter.complete();
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@ import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
@@ -192,11 +191,6 @@ public class ResponseBodyEmitterReturnValueHandler implements HandlerMethodRetur
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private <T> void sendInternal(T data, @Nullable MediaType mediaType) throws IOException {
|
||||
if (logger.isTraceEnabled()) {
|
||||
String format = mediaType != null ? "\"" + mediaType + "\" from " : "";
|
||||
logger.trace("Writing " + format + "[" +
|
||||
(data instanceof CharSequence ? "\"" + data + "\"" : data) + "]");
|
||||
}
|
||||
for (HttpMessageConverter<?> converter : ResponseBodyEmitterReturnValueHandler.this.messageConverters) {
|
||||
if (converter.canWrite(data.getClass(), mediaType)) {
|
||||
((HttpMessageConverter<T>) converter).write(data, mediaType, this.outputMessage);
|
||||
|
||||
@@ -157,7 +157,7 @@ public class PathResourceResolver extends AbstractResourceResolver {
|
||||
}
|
||||
}
|
||||
catch (IOException ex) {
|
||||
if (logger.isDebugEnabled() || logger.isTraceEnabled()) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
String error = "Skip location [" + location + "] due to error";
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace(error, ex);
|
||||
|
||||
Reference in New Issue
Block a user