我们使用spring boot来编写RESTFul Web服务。我们的应用程序中有大量的Web服务。而新的要求现在就在这里。我的老板让我跟踪每个服务请求。 例如:如果调用登录服务,则必须使用计数,响应状态和更多详细信息来跟踪它。有办法吗?类似于拦截器的东西,它将在处理服务之后和服务响应之前调用。
答案 0 :(得分:2)
Spring Boot支持servlet过滤器,允许你以与@Component相同的方式注册它们。(通过使用@Component注释类并将其放在Spring Boot将自动配置类的包中)
使用(ServletRequest req,ServletResponse res)对象来检索所需的数据。
package application.basepackage.maybeafilterspecificpackage;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
@Component
public class SimpleLoggingFilter implements Filter {
private final Logger logger = LoggerFactory.getLogger(SimpleLoggingFilter .class);
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
String url = request.getServletPath();
logger.info(url + " - " + request.getMethod());
chain.doFilter(req, res);
logger.info(url + " - " + response.getStatus());
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
我创建了一个映射到/ test的@RequestMapping,它只是返回一个String,我清理我的日志以便更具可读性。
这是第一次让方法抛出异常
/test - GET
/test - 500
/favicon.ico - GET
/favicon.ico - 200
然后我修复它只是返回一个字符串
/test - GET
/test - 200
/favicon.ico - GET
/favicon.ico - 200
你说话就好像你需要对你的日志更多的权力,但如果你使用嵌入式Tomcat,那么更简单的替代方案就是。
答案 1 :(得分:0)
我认为适合您的工具是Spring Boot Actuator,尤其是跟踪应用程序每个端点(以及其他内容)的请求(和响应代码)的/ metrics网址:
https://spring.io/guides/gs/actuator-service/
http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-metrics.html