How to enable logging for @RestController?
java, rest, spring, web-services
Solution
You can just enable log4j org.springframework.security if you are using spring security, but it's very verbose:
<category name="org.springframework.security">
<priority value="ALL" />
</category>
Or you can implement an interceptor:
public class LoggerInterceptor extends HandlerInterceptorAdapter {
private static final Logger logger = LoggerFactory.getLogger(LoggerInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
logger.info("pre hangle URI: " + request.getRequestURI());
return super.preHandle(request, response, handler);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
logger.info("post hangle URI: " + request.getRequestURI());
super.afterCompletion(request, response, handler, ex);
}
}
applicationContext.xml
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.mycompany.LoggerInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
Problem
How can I automatically log any incoming `GET` url requests on a `REST` service written with `Spring`? ``` @RestController public class MyRest { @RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_XML_VALUE) @ResponseBody public ComplexRsp test() { //... } } ``` I have used `cxf` for `soap`, where logging is as easy as annotation the webservice with `@InInterceptors, @OutInterceptors`. Is there anything similar in spring for rest?