Skip to content

Instantly share code, notes, and snippets.

@stefanorg
Forked from erard22/ResponseTimeLogger.java
Created September 29, 2017 20:46
Show Gist options
  • Save stefanorg/cd6d605ce0497874d0b42ea787c44116 to your computer and use it in GitHub Desktop.
Save stefanorg/cd6d605ce0497874d0b42ea787c44116 to your computer and use it in GitHub Desktop.
An interceptor logging the response time and additional information of a REST call to a Resteasy resource
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.ext.Provider;
import org.jboss.resteasy.annotations.interception.ServerInterceptor;
import org.jboss.resteasy.core.ResourceMethod;
import org.jboss.resteasy.core.ServerResponse;
import org.jboss.resteasy.spi.Failure;
import org.jboss.resteasy.spi.HttpRequest;
import org.jboss.resteasy.spi.interception.PostProcessInterceptor;
import org.jboss.resteasy.spi.interception.PreProcessInterceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Provider
@ServerInterceptor
public class ResponseTimeLogger implements PreProcessInterceptor, PostProcessInterceptor {
private static final Logger logger = LoggerFactory.getLogger(ResponseTimeLogger.class);
public static final String REQUEST_START_TIME = "RequestStartTime";
@Context
private HttpServletRequest servletRequest;
public ServerResponse preProcess(HttpRequest request, ResourceMethod resourceMethod) throws Failure, WebApplicationException {
servletRequest.setAttribute(REQUEST_START_TIME, System.currentTimeMillis());
return null;
}
@Override
public void postProcess(ServerResponse serverResponse) {
try {
logger.info("Invoked resource {}.{}. ip={}, uri={}, status={}, duration={}ms,",
serverResponse.getResourceClass().getName(),
serverResponse.getResourceMethod().getName(),
servletRequest.getRemoteAddr(),
servletRequest.getRequestURI(),
serverResponse.getStatus(),
(System.currentTimeMillis() - ((Long) servletRequest.getAttribute(REQUEST_START_TIME)))
);
} catch (RuntimeException e) {
logger.warn("Error while logging request data.", e);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment