Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save PRASANTHRAJENDRAN/abd85b81e0bb55a939bce95aef9fceaa to your computer and use it in GitHub Desktop.

Select an option

Save PRASANTHRAJENDRAN/abd85b81e0bb55a939bce95aef9fceaa to your computer and use it in GitHub Desktop.
JaxRS Request and Response logging filter code sample
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Priority;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.ext.WriterInterceptor;
import javax.ws.rs.ext.WriterInterceptorContext;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.stream.Collectors;
@Priority(100)
@Provider
public class JaxRSRequestResponseLoggerFilter implements ContainerRequestFilter, WriterInterceptor {
private static final Logger logger = LoggerFactory.getLogger(RequestResponseLoggerFilter.class);
@Override
public void filter(ContainerRequestContext requestContext) {
try {
InputStream entityStream = requestContext.getEntityStream();
String requestString = new BufferedReader(
new InputStreamReader(entityStream, StandardCharsets.UTF_8))
.lines().collect(Collectors.joining());
// As the Stream is already read it is important to reset the stream again
InputStream inputStream = new ByteArrayInputStream(requestString.getBytes(StandardCharsets.UTF_8));
requestContext.setEntityStream(inputStream);
logger.debug("Request {}", requestString);
} catch (Exception e) {
logger.error("Exception {}", e.getMessage());
}
}
@Override
public void aroundWriteTo(WriterInterceptorContext writerInterceptorContext)
throws IOException, WebApplicationException {
try {
ObjectMapper objectMapper = new ObjectMapper();
String responseString = objectMapper.writeValueAsString(writerInterceptorContext.getEntity());
logger.info("Response {}", responseString);
writerInterceptorContext.proceed();
} catch (Exception e) {
logger.error("Exception {}", e.getMessage());
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment