Last active
June 20, 2024 06:17
-
-
Save PRASANTHRAJENDRAN/abd85b81e0bb55a939bce95aef9fceaa to your computer and use it in GitHub Desktop.
JaxRS Request and Response logging filter code sample
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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