我有一个Java应用程序,我想记录每个REST服务的所有执行时间。
如何衡量每个请求的执行时间?如何配置过滤器?
答案 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");
}