如何使用Spring MVC正确记录HTTP请求
问题内容:
您好,我一直在尝试找出在应用程序中记录HTTP请求的通用方法,到目前为止还算不上好运,这是我现在处理日志的方式,即:
@RequestMapping(value="register", method = RequestMethod.POST)
@ResponseBody
public String register(@RequestParam(value="param1",required=false) String param1, @RequestParam("param2") String param2, @RequestParam("param3") String param3, HttpServletRequest request){
long start = System.currentTimeMillis();
logger.info("!--REQUEST START--!");
logger.info("Request URL: " + request.getRequestURL().toString());
List<String> requestParameterNames = Collections.list((Enumeration<String>)request.getParameterNames());
logger.info("Parameter number: " + requestParameterNames.size());
for (String parameterName : requestParameterNames){
logger.info("Parameter name: " + parameterName + " - Parameter value: " + request.getParameter(parameterName));
}
//Some processing logic, call to the various services/methods with different parameters, response is always String(Json)
String response = service.callSomeServiceMethods(param1,param2,param3);
logger.info("Response is: " + response);
long end = System.currentTimeMillis();
logger.info("Requested completed in: " + (end-start) + "ms");
logger.info("!--REQUEST END--!");
return response;
}
因此,我现在针对不同的控制器/方法所做的事情是,从方法内部的开始复制所有内容,直到不同方法的处理逻辑不同,然后从上方复制所有内容,如上面的模板所示。
这有点混乱,并且有很多代码重复(我不喜欢)。但是我需要记录所有内容。
有人在这种日志记录方面有更多经验吗,有人可以对此有所了解吗?
问题答案:
使用拦截器:
- 扩展
HandlerInterceptorAdapter
和覆盖preHandle
- 用
<mvc:interceptors>
in 定义dispatcher-servlet.xml
它将针对每个请求运行。