From f05345112f95e9e282dc4ce169787fbf941d676b Mon Sep 17 00:00:00 2001 From: Sarf Khan Date: Sun, 16 Jul 2017 21:39:35 +0530 Subject: [PATCH] Spring rest logging Log incoming request --- spring-rest-logging/pom.xml | 64 +++++++++++++++++++ .../baeldung/rest/log/app/Application.java | 18 ++++++ .../log/app/TaxiFareRequestInterceptor.java | 27 ++++++++ .../config/RequestLoggingFilterConfig.java | 23 +++++++ .../rest/log/config/TaxiFareMVCConfig.java | 20 ++++++ .../log/controller/TaxiFareController.java | 40 ++++++++++++ .../com/baeldung/rest/log/data/RateCard.java | 28 ++++++++ .../com/baeldung/rest/log/data/TaxiRide.java | 32 ++++++++++ .../service/TaxiFareCalculatorService.java | 20 ++++++ .../src/main/resources/application.properties | 2 + .../src/main/resources/logback.xml | 21 ++++++ .../controller/TestTaxiFareController.java | 33 ++++++++++ 12 files changed, 328 insertions(+) create mode 100644 spring-rest-logging/pom.xml create mode 100644 spring-rest-logging/src/main/java/com/baeldung/rest/log/app/Application.java create mode 100644 spring-rest-logging/src/main/java/com/baeldung/rest/log/app/TaxiFareRequestInterceptor.java create mode 100644 spring-rest-logging/src/main/java/com/baeldung/rest/log/config/RequestLoggingFilterConfig.java create mode 100644 spring-rest-logging/src/main/java/com/baeldung/rest/log/config/TaxiFareMVCConfig.java create mode 100644 spring-rest-logging/src/main/java/com/baeldung/rest/log/controller/TaxiFareController.java create mode 100644 spring-rest-logging/src/main/java/com/baeldung/rest/log/data/RateCard.java create mode 100644 spring-rest-logging/src/main/java/com/baeldung/rest/log/data/TaxiRide.java create mode 100644 spring-rest-logging/src/main/java/com/baeldung/rest/log/service/TaxiFareCalculatorService.java create mode 100644 spring-rest-logging/src/main/resources/application.properties create mode 100644 spring-rest-logging/src/main/resources/logback.xml create mode 100644 spring-rest-logging/src/test/java/com/baeldung/rest/log/controller/TestTaxiFareController.java diff --git a/spring-rest-logging/pom.xml b/spring-rest-logging/pom.xml new file mode 100644 index 0000000000..5924650e5f --- /dev/null +++ b/spring-rest-logging/pom.xml @@ -0,0 +1,64 @@ + + 4.0.0 + com.baeldung + spring-rest-logging + 0.1-SNAPSHOT + spring-rest-logging + war + + + org.springframework.boot + spring-boot-starter-parent + 1.4.3.RELEASE + + + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + + org.springframework.boot + spring-boot-test + + + + + org.springframework + spring-web + + + commons-logging + commons-logging + + + + + org.springframework + spring-webmvc + + + + + + javax.servlet + javax.servlet-api + provided + + + + junit + junit + test + + + + org.springframework + spring-test + + + diff --git a/spring-rest-logging/src/main/java/com/baeldung/rest/log/app/Application.java b/spring-rest-logging/src/main/java/com/baeldung/rest/log/app/Application.java new file mode 100644 index 0000000000..9eb79ee1b1 --- /dev/null +++ b/spring-rest-logging/src/main/java/com/baeldung/rest/log/app/Application.java @@ -0,0 +1,18 @@ +package com.baeldung.rest.log.app; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.support.SpringBootServletInitializer; +import org.springframework.context.annotation.ComponentScan; + +@EnableAutoConfiguration +@ComponentScan("com.baeldung") +@SpringBootApplication +public class Application extends SpringBootServletInitializer { + + public static void main(final String[] args) { + SpringApplication.run(Application.class, args); + } + +} \ No newline at end of file diff --git a/spring-rest-logging/src/main/java/com/baeldung/rest/log/app/TaxiFareRequestInterceptor.java b/spring-rest-logging/src/main/java/com/baeldung/rest/log/app/TaxiFareRequestInterceptor.java new file mode 100644 index 0000000000..bc011a4db7 --- /dev/null +++ b/spring-rest-logging/src/main/java/com/baeldung/rest/log/app/TaxiFareRequestInterceptor.java @@ -0,0 +1,27 @@ +package com.baeldung.rest.log.app; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +@Component +public class TaxiFareRequestInterceptor extends HandlerInterceptorAdapter { + + Logger LOGGER = LoggerFactory.getLogger(TaxiFareRequestInterceptor.class); + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + LOGGER.info("REQUEST URI: " + request.getRequestURI()); + return true; + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + LOGGER.info("RESPONSE: " + response.getStatus()); + } + +} diff --git a/spring-rest-logging/src/main/java/com/baeldung/rest/log/config/RequestLoggingFilterConfig.java b/spring-rest-logging/src/main/java/com/baeldung/rest/log/config/RequestLoggingFilterConfig.java new file mode 100644 index 0000000000..158ba51f77 --- /dev/null +++ b/spring-rest-logging/src/main/java/com/baeldung/rest/log/config/RequestLoggingFilterConfig.java @@ -0,0 +1,23 @@ +package com.baeldung.rest.log.config; + +import javax.servlet.annotation.WebFilter; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.filter.CommonsRequestLoggingFilter; + +@Configuration +@WebFilter +public class RequestLoggingFilterConfig { + + @Bean + public CommonsRequestLoggingFilter logFilter() { + CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter(); + filter.setIncludeQueryString(true); + filter.setIncludePayload(true); + filter.setMaxPayloadLength(10000); + filter.setIncludeHeaders(false); + filter.setAfterMessagePrefix("REQUEST DATA : "); + return filter; + } +} diff --git a/spring-rest-logging/src/main/java/com/baeldung/rest/log/config/TaxiFareMVCConfig.java b/spring-rest-logging/src/main/java/com/baeldung/rest/log/config/TaxiFareMVCConfig.java new file mode 100644 index 0000000000..71d0fd379f --- /dev/null +++ b/spring-rest-logging/src/main/java/com/baeldung/rest/log/config/TaxiFareMVCConfig.java @@ -0,0 +1,20 @@ +package com.baeldung.rest.log.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; + +import com.baeldung.rest.log.app.TaxiFareRequestInterceptor; + +@Configuration +public class TaxiFareMVCConfig extends WebMvcConfigurerAdapter { + + @Autowired + private TaxiFareRequestInterceptor taxiFareRequestInterceptor; + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(taxiFareRequestInterceptor).addPathPatterns("/**/taxifare/**/"); + } +} diff --git a/spring-rest-logging/src/main/java/com/baeldung/rest/log/controller/TaxiFareController.java b/spring-rest-logging/src/main/java/com/baeldung/rest/log/controller/TaxiFareController.java new file mode 100644 index 0000000000..0d8e4dafa4 --- /dev/null +++ b/spring-rest-logging/src/main/java/com/baeldung/rest/log/controller/TaxiFareController.java @@ -0,0 +1,40 @@ +package com.baeldung.rest.log.controller; + +import javax.validation.Valid; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.baeldung.rest.log.data.RateCard; +import com.baeldung.rest.log.data.TaxiRide; +import com.baeldung.rest.log.service.TaxiFareCalculatorService; + +@Controller +public class TaxiFareController { + + @Autowired + private TaxiFareCalculatorService taxiFareCalculatorService; + + private static final Logger LOGGER = LoggerFactory.getLogger(TaxiFareController.class); + + @RequestMapping(method = RequestMethod.GET, value = "/taxifare/get/") + @ResponseBody + public RateCard getTaxiFare() { + LOGGER.debug("getTaxiFare() - START"); + return new RateCard(); + } + + @RequestMapping(method = RequestMethod.POST, value = "/taxifare/calculate/") + @ResponseBody + public String calculateTaxiFare(@RequestBody @Valid TaxiRide taxiRide) { + LOGGER.debug("calculateTaxiFare() - START"); + return taxiFareCalculatorService.calculateFare(taxiRide); + } + +} diff --git a/spring-rest-logging/src/main/java/com/baeldung/rest/log/data/RateCard.java b/spring-rest-logging/src/main/java/com/baeldung/rest/log/data/RateCard.java new file mode 100644 index 0000000000..6e0c6d0e38 --- /dev/null +++ b/spring-rest-logging/src/main/java/com/baeldung/rest/log/data/RateCard.java @@ -0,0 +1,28 @@ +package com.baeldung.rest.log.data; + +public class RateCard { + + private String nightSurcharge; + private String ratePerMile; + + public RateCard(){ + nightSurcharge="Extra $ 100"; + ratePerMile="$ 10 Per Mile"; + } + + + public String getNightSurcharge() { + return nightSurcharge; + } + public void setNightSurcharge(String nightSurcharge) { + this.nightSurcharge = nightSurcharge; + } + public String getRatePerMile() { + return ratePerMile; + } + public void setRatePerMile(String ratePerMile) { + this.ratePerMile = ratePerMile; + } + + +} diff --git a/spring-rest-logging/src/main/java/com/baeldung/rest/log/data/TaxiRide.java b/spring-rest-logging/src/main/java/com/baeldung/rest/log/data/TaxiRide.java new file mode 100644 index 0000000000..bcf102e49d --- /dev/null +++ b/spring-rest-logging/src/main/java/com/baeldung/rest/log/data/TaxiRide.java @@ -0,0 +1,32 @@ +package com.baeldung.rest.log.data; + +public class TaxiRide { + + private Boolean isNightSurcharge; + private Long distanceInMile; + + public TaxiRide(){} + + public TaxiRide(Boolean isNightSurcharge, Long distanceInMile){ + this.isNightSurcharge = isNightSurcharge; + this.distanceInMile = distanceInMile; + } + + + public Boolean getIsNightSurcharge() { + return isNightSurcharge; + } + + public void setIsNightSurcharge(Boolean isNightSurcharge) { + this.isNightSurcharge = isNightSurcharge; + } + + public Long getDistanceInMile() { + return distanceInMile; + } + + public void setDistanceInMile(Long distanceInMile) { + this.distanceInMile = distanceInMile; + } + +} diff --git a/spring-rest-logging/src/main/java/com/baeldung/rest/log/service/TaxiFareCalculatorService.java b/spring-rest-logging/src/main/java/com/baeldung/rest/log/service/TaxiFareCalculatorService.java new file mode 100644 index 0000000000..31dfd7ac50 --- /dev/null +++ b/spring-rest-logging/src/main/java/com/baeldung/rest/log/service/TaxiFareCalculatorService.java @@ -0,0 +1,20 @@ +package com.baeldung.rest.log.service; + +import org.springframework.stereotype.Service; + +import com.baeldung.rest.log.data.TaxiRide; + +@Service +public class TaxiFareCalculatorService { + + public String calculateFare(TaxiRide taxiRide) { + Long fare = 0l; + if (taxiRide.getIsNightSurcharge()) { + fare = taxiRide.getDistanceInMile() * 10 + 100; + } else { + fare = taxiRide.getDistanceInMile() * 10; + } + return String.valueOf(fare); + } + +} diff --git a/spring-rest-logging/src/main/resources/application.properties b/spring-rest-logging/src/main/resources/application.properties new file mode 100644 index 0000000000..ff8a818e66 --- /dev/null +++ b/spring-rest-logging/src/main/resources/application.properties @@ -0,0 +1,2 @@ +server.port= 9090 +server.context-path=/rest-log diff --git a/spring-rest-logging/src/main/resources/logback.xml b/spring-rest-logging/src/main/resources/logback.xml new file mode 100644 index 0000000000..08117752c7 --- /dev/null +++ b/spring-rest-logging/src/main/resources/logback.xml @@ -0,0 +1,21 @@ + + + + + web - %date [%thread] %-5level %logger{36} - %message%n + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-rest-logging/src/test/java/com/baeldung/rest/log/controller/TestTaxiFareController.java b/spring-rest-logging/src/test/java/com/baeldung/rest/log/controller/TestTaxiFareController.java new file mode 100644 index 0000000000..61d279a0c5 --- /dev/null +++ b/spring-rest-logging/src/test/java/com/baeldung/rest/log/controller/TestTaxiFareController.java @@ -0,0 +1,33 @@ +package com.baeldung.rest.log.controller; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; + +import org.junit.Test; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import com.baeldung.rest.log.data.TaxiRide; + +public class TestTaxiFareController { + + private static final String URL = "http://localhost:" + 9090 + "/rest-log/taxifare/"; + + @Test + public void given_taxi_fare_get() { + TestRestTemplate testRestTemplate = new TestRestTemplate(); + ResponseEntity response = testRestTemplate.getForEntity(URL + "get/", String.class); + assertThat(response.getStatusCode(), equalTo(HttpStatus.OK)); + } + + @Test + public void given_taxi_ride_get_fare() { + TestRestTemplate testRestTemplate = new TestRestTemplate(); + TaxiRide taxiRide = new TaxiRide(true,10l); + String fare = testRestTemplate.postForObject(URL + "calculate/", taxiRide,String.class); + assertThat(fare, equalTo("200")); + } + + +}