Jersey记录服务的所有响应时间

时间:2014-11-11 14:52:42

标签: java jersey restful-url

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

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

2 个答案:

答案 0 :(得分:5)

泽西岛event listeners必须是您追求的目标。

他们docs中提到的event listeners有两种类型的监控和跟踪:

  
      
  • ApplicationEventListener用于收听应用程序事件,
  •   
  • RequestEventListener用于侦听请求处理事件
  •   
     

只有第一个类型,ApplicationEventListener可以直接使用   注册为应用程序范围的提供商。 RequestEventListener   被设计为特定于每个请求,并且只能返回   来自ApplicationEventListener。

答案 1 :(得分: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");        
}