Spring Boot应用程序:http响应时间的负值

时间:2018-07-31 05:24:21

标签: java spring spring-boot servlet-filters undertow

我遵循该技术开发了一个Web应用程序。

  1. Spring boot(undertow starter):1.4.2
  2. Java 7
  3. 操作系统:Centos
  4. Servlet过滤器:org.spring.web.filter.OncePerRequestFilter

在步骤4中,过滤器用于打印http请求/响应信息日志。这些数据包括:

  • (a)http网址
  • (b)请求正文
  • (c)响应正文
  • (d)响应时间。

(d)响应时间出现问题。 但是,大多数响应时间都可以。但是对于很少的http请求和响应,我发现日志的响应时间为负数(例如-1024ms)。

在这里,我在Servlet过滤器中手动计算了http响应时间

protected void doFilterInternal(...){

  long startTime = System.currentTimeMillis();
  ..
  some code
  filterChain.doFilter(httpRequest,httpResonse);
  ...
  long endTime = System.currentTimeMillis();
  long responseTime = endTime  - startTime
  log.debug(responseTIme); [SLF4J logger,logback.xml]

}

1 个答案:

答案 0 :(得分:0)

我使用了Google guava库的StopWatch api,它使用了Java time api System.nanoTime()。

https://github.com/google/guava/blob/master/guava/src/com/google/common/base/Stopwatch.java

import com.google.common.base.Stopwatch;
import java.util.concurrent.TimeUnit;


Stopwatch stopwatch = new Stopwatch();
stopwatch.start();

... 
do some code
....

stopwatch.stop();
long value = stopwatch.elapsedTime(TimeUnit.MICROSECONDS);

它可以帮助我解决问题

谢谢 @flopcodder @吉姆·加里森