2016-12-12 1 views
1

모든 요청이나 조치가 필요한 시간을 내 기록에 표시하고 싶습니다.Play 프레임 워크에서 요청 필터를 추가하는 방법은 무엇입니까?

이 클래스를 컨트롤러에 추가했지만 로그에 아무 것도 나타나지 않습니다. !!!! 로그에 요청 시간을 표시하려면 어떻게해야합니까?

미리 감사드립니다. 공식 가이드에 대한 this section of documentation를 참조 - 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에서 제공하는 링크를 따라 가십시오. @Roman은 모든 필터를 조립하고 구성된 것을 보여줍니다. 이것이 사슬입니다. – rethab

답변

3

당신은 필터 체인을 정의해야합니다. 당신의 Filters 클래스는 루트 패키지에있는 경우

import filters.LoggingFilter; 
import play.http.DefaultHttpFilters; 
import javax.inject.Inject; 

public class Filters extends DefaultHttpFilters { 
    @Inject 
    public Filters(LoggingFilter logging) { 
    super(logging); 
    } 
} 

, 당신은 당신의 application.conf에 아무것도 변경할 필요가 없습니다. 표준 Play 패키지 구조의 경우 루트 패키지는 controllersviews과 동일한 수준이며 Filters 클래스 자체는 소스 파일의 첫 번째 줄로 package이되지 않습니다.

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

당신이 다른 곳에있는 경우 당신이 application.conf에 선언 할 필요가 com.example.filters 말한다.

play.http.filters=com.example.Filters 
+0

Hello steve, 루트 패키지 란 무엇입니까? 당신은 뜻 : 컨트롤러? 다른 질문이 있다면 제발 컨트롤러 대신에 당신의 액션을 추가해야합니까? 도와 주셔서 대단히 감사합니다. – user3761024

+0

루트 패키지를 보여주기위한 답을 편집했습니다. controllers.java가 무슨 뜻인지 모르겠습니다. –

+0

오 오케이, 그것은 필터라는 폴더이며 그 위치는 다음과 같습니다 :/app/filters 나는 진짜 바보 같은 여자 하하하입니다. 메신저 시도해보고 application.log가 행동 또는 요청으로 시간을 표시 할 것인지 확인하십시오. 말해줘.) JAVA에 관한 나의 작은 지식에 대한 정말로 감사와 변명 – user3761024

관련 문제