如何在使用GET
编写的REST
服务上自动记录任何传入的Spring
网址请求?
@RestController
public class MyRest {
@RequestMapping(method = RequestMethod.GET,
produces = MediaType.APPLICATION_XML_VALUE)
@ResponseBody
public ComplexRsp test() {
//...
}
}
我已将cxf
用于soap
,其中日志记录与使用@InInterceptors, @OutInterceptors
的网络服务注释一样简单。
春天有什么类似的休息吗?
答案 0 :(得分:1)
如果你使用spring security,你可以启用log4j org.springframework.security,但它非常详细:
<category name="org.springframework.security">
<priority value="ALL" />
</category>
或者你可以实现一个拦截器:
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>
答案 1 :(得分:1)
这可能有点黑客,但肯定很容易。只需向控制器添加@ModelAttribute
带注释的方法即可。 Spring每次调用任何处理程序方法之前都会调用它。响应和请求对象可以添加到签名中,Spring会注入它们:
@ModelAttribute
protected void logging(HttpServletRequest request, HttpServletResponse response) {
// do your logging here
}