我想在我的日志中显示每次请求或操作所需的时间..
我将这个类添加到我的控制器中,但我的日志中没有任何变化! 我该怎么做才能在我的日志中显示请求时间?
提前谢谢你。 Reference of Class
import java.util.concurrent.CompletionStage;
import java.util.function.Function;
import javax.inject.Inject;
import akka.stream.Materializer;
import play.Logger;
import play.mvc.*;
public class LoggingFilter extends Filter {
@Inject
public LoggingFilter(Materializer mat) {
super(mat);
}
@Override
public CompletionStage<Result> apply(
Function<Http.RequestHeader, CompletionStage<Result>> nextFilter,
Http.RequestHeader requestHeader) {
long startTime = System.currentTimeMillis();
return nextFilter.apply(requestHeader).thenApply(result -> {
long endTime = System.currentTimeMillis();
long requestTime = endTime - startTime;
Logger.info("{} {} took {}ms and returned {}",
requestHeader.method(), requestHeader.uri(), requestTime, result.status());
return result.withHeader("Request-Time", "" + requestTime);
});
}
}
答案 0 :(得分:3)
您需要定义过滤器链 - 有关官方指南,请参阅this section of documentation。
import filters.LoggingFilter;
import play.http.DefaultHttpFilters;
import javax.inject.Inject;
public class Filters extends DefaultHttpFilters {
@Inject
public Filters(LoggingFilter logging) {
super(logging);
}
}
如果您的Filters
课程位于根目录中,则无需更改application.conf
中的任何内容。对于标准Play包结构,根包与controllers
和views
处于同一级别,Filters
类本身不会将package
作为第一行源文件。
+- controllers
| \ App.java
+- filters
| \ LoggingFilter.java
- Filters.java
如果你有其他地方,比如com.example.filters
,你需要在application.conf
声明它。
play.http.filters=com.example.Filters