跟踪 spring 启动应用程序中的所有请求

Track all requests in a spring boot application

我们已经使用spring引导编写了RESTFul网络服务。我们的应用程序中有大量的 Web 服务。新要求现在就在这里。我的老板让我跟踪每个服务请求。 例如:如果调用登录服务,则必须使用计数、响应状态和更多详细信息对其进行跟踪。有办法吗?诸如拦截器之类的东西,它将在处理服务之后和响应之前被调用。

Spring Boot 支持 servlet 过滤器,并允许您以与任何 @Component 相同的方式注册它们。(通过使用 @Component 注释 class 并将其放在包中 Spring 开机会自动配置 class)

使用 (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,它只是 return下面的一个字符串 我清理了我的日志以提高可读性。

这是我第一次让方法抛出异常

/test - GET
/test - 500
/favicon.ico - GET
/favicon.ico - 200

然后我将它固定为 return 一个字符串

/test - GET
/test - 200
/favicon.ico - GET
/favicon.ico - 200

您说的好像您需要对日志有更多的控制权,但是如果您使用的是嵌入式 Tomcat,那么一个更简单的选择是。

我认为适合您的工具是 Spring Boot Actuator,尤其是 /metrics url,它跟踪应用程序每个端点的请求(和响应代码)(除其他外):

https://spring.io/guides/gs/actuator-service/

http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-metrics.html