2016-12-12 2 views
1

Я хотел бы показать в моих журналах время, которое может принимать каждый запрос или действие.Как добавить фильтры запросов в платформе Play?

Я добавил этот класс к своему контроллеру, но ничего не произошло в моем журнале !!!! Что мне делать, чтобы показать время запроса в моем журнале, пожалуйста?

заблаговременно. 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

Вы добавили фильтр в цепочку фильтров? См. Https://www.playframework.com/documentation/2.5.x/JavaHttpFilters#Using-filters – Roman

+0

Hell Roman, Что вы подразумеваете под цепочкой фильтров? Мне нужно добавить этот класс в контроллер рядом с первым? – user3761024

+0

Вы настроили фильтры в своем конфиге? Пожалуйста, перейдите по ссылке, предоставленной @Roman, которая показывает, что собирает все ваши фильтры и настраивается. Это цепочка. – rethab

ответ

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 
+0

Hello steve, Что вы подразумеваете под корневым пакетом? Вы имели в виду: Контроллеры? другой вопрос, если я могу радовать, мне нужно только добавить свое действие вместо моего в контроллеры.java? Большое вам спасибо за помощь – user3761024

+0

Я отредактировал ответ, чтобы показать корневой пакет. Я не уверен, что вы подразумеваете под контроллерами.java. –

+0

О, хорошо, это папка с именами фильтров, и ее местоположение:/app/filters Я действительно глупая девушка hahaha ok im gona попробуйте это и посмотрим, будет ли application.log отображать время по действию или запросить i will скажите вам;) действительно спасибо и оправданы за мои небольшие знания о JAVA. – user3761024

Смежные вопросы