我想在日志中显示,这可能需要每个请求或操作。
我将此类添加到我的控制器中,但日志中什么都没有发生!!!我该怎么做才能在我的日志中显示请求时间?
预先感谢您。班级的参考
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);
});
}
}
您需要定义过滤器链 - 请参阅官方指南的文档部分。
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
中的任何内容。对于标准播放软件包结构,根软件包与controllers
和views
相同,Filters
类本身将没有package
作为源文件的第一行。
+- controllers
| App.java
+- filters
| LoggingFilter.java
- Filters.java
如果您在其他地方(例如com.example.filters
),则需要在application.conf
中声明。
play.http.filters=com.example.Filters