【问题标题】:Track all requests in a spring boot application跟踪 Spring Boot 应用程序中的所有请求
【发布时间】:2016-02-02 00:40:48
【问题描述】:

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

【问题讨论】:

    标签: spring-boot interceptor


    【解决方案1】:

    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,它在下面简单地返回一个字符串,我清理了我的日志以提高可读性。

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

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

    然后我修复它以简单地返回一个字符串

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

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

    Spring Boot enable http requests logging

    【讨论】:

    • 感谢您的回复。我将采用不同的方法来解析访问日志。需要最终确定更好的方法
    【解决方案2】:

    我认为适合您的工具是 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

    【讨论】:

    • 感谢您的回复。我将采用不同的方法来解析访问日志。需要最终确定更好的方法
    猜你喜欢
    • 1970-01-01
    • 2018-11-08
    • 2020-06-16
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 2014-07-27
    相关资源
    最近更新 更多