如何在游戏框架中添加请求过滤器



我想在日志中显示,这可能需要每个请求或操作。

我将此类添加到我的控制器中,但日志中什么都没有发生!!!我该怎么做才能在我的日志中显示请求时间?

预先感谢您。班级的参考

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中的任何内容。对于标准播放软件包结构,根软件包与controllersviews相同,Filters类本身将没有package作为源文件的第一行。

+- controllers
|  App.java
+- filters
|  LoggingFilter.java
- Filters.java

如果您在其他地方(例如com.example.filters),则需要在application.conf中声明。

play.http.filters=com.example.Filters

最新更新