【问题标题】:Jersey log all response times for servicesJersey 记录服务的所有响应时间
【发布时间】:2014-11-11 14:52:42
【问题描述】:

我有一个 Java 应用程序,我想记录每个 REST 服务的所有执行时间。

如何衡量每个请求的执行时间?过滤器将如何配置?

【问题讨论】:

    标签: java jersey restful-url


    【解决方案1】:

    球衣event listeners 一定是你所追求的。

    event listeners 有两种风格,如他们的 docs 关于监控和跟踪:

    • ApplicationEventListener 用于监听应用程序事件,以及
    • RequestEventListener 用于监听请求处理的事件

    只有第一种,ApplicationEventListener可以直接 注册为应用程序范围的提供程序。请求事件监听器 专为每个请求而设计,并且只能返回 来自 ApplicationEventListener 本身。

    【讨论】:

    • 什么包?我有这个:com.sun.jersey.spi.monitoring.RequestListener
    • 我也采用了这种方法。实现这两个监听器似乎是最合适的解决方案。 Jersey 2.* 的包是 org.glassfish.jersey.server.monitoring
    • 如果您单击此答案中提供的链接中的用户指南并检查(在发表此评论时)示例 22.2。请求事件监听器,您将看到一个关于如何获取完成请求所用时间的示例。
    【解决方案2】:

    我为所有服务请求添加了一个过滤器,它工作正常:

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain p_filterChain) throws IOException, ServletException {
    
    
        long startTime = System.currentTimeMillis();
        String url = "unknown"; 
        if (request instanceof HttpServletRequest) {
             url = ((HttpServletRequest)request).getRequestURL().toString();
             String queryString = ((HttpServletRequest)request).getQueryString();
             if(queryString != null)
                 url += "?" + queryString;
        }
    
    
        p_filterChain.doFilter(request, response);
    
        long stopTime = System.currentTimeMillis();
        long elapsedTime = stopTime - startTime;
    
        LogManager logm = new LogManager();
        logm.newLog(url,elapsedTime);
        System.out.println("Request: " + url + "  " + elapsedTime + "ms");        
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      相关资源
      最近更新 更多