복붙노트

[SPRING] RESTful 게시물 데이터를 어떻게 기록합니까?

SPRING

RESTful 게시물 데이터를 어떻게 기록합니까?

Spring MVC를 통해 노출 된 REST 서비스가있다. HandlerExceptionResolver를 사용하여 예외를 기록합니다. 우리는 현재 다음을 기록합니다 :

JSON 게시 데이터도 기록 할 수 있다면 디버깅이 쉬워집니다. 이것을 얻는 방법에 대한 제안?

해결법

  1. ==============================

    1.요청 본문을 읽을 때 저장하고 나중에 저장된 로그를 예외 로거에 제공하는 필터가 필요합니다.

    요청 본문을 읽을 때 저장하고 나중에 저장된 로그를 예외 로거에 제공하는 필터가 필요합니다.

    Spring은 비슷한 일을하는 AbstractRequestLoggingFilter를 포함한다. 자신의 문제에 직접적으로 적합하지는 않지만 직접 필터를 구현하기 위해 참조로 사용할 수 있습니다.

  2. ==============================

    2.응용 프로그램의 구성을 나타내는 클래스에 다음을 추가합니다.

    응용 프로그램의 구성을 나타내는 클래스에 다음을 추가합니다.

    import javax.servlet.Filter;
    import javax.servlet.http.HttpServletRequest;
    import org.springframework.web.filter.AbstractRequestLoggingFilter;
    

    ....

    @Bean
    public Filter loggingFilter(){
        AbstractRequestLoggingFilter f = new AbstractRequestLoggingFilter() {
    
            @Override
            protected void beforeRequest(HttpServletRequest request, String message) {
                System.out.println("beforeRequest: " +message);
            }
    
            @Override
            protected void afterRequest(HttpServletRequest request, String message) {
                System.out.println("afterRequest: " +message);
            }
        };
        f.setIncludeClientInfo(true);
        f.setIncludePayload(true);
        f.setIncludeQueryString(true);
    
        f.setBeforeMessagePrefix("BEFORE REQUEST  [");
        f.setAfterMessagePrefix("AFTER REQUEST    [");
        f.setAfterMessageSuffix("]\n");
        return f;
    }
    

    당신은 코멘트를 써야 할 수도 있습니다.

       f.setIncludePayload(true);
    
  3. ==============================

    3.요청 / 응답의 페이로드를 쉽게 기록 할 수있는 방법은 없습니다. 자바 웹 필터를 사용하여 모든 요청과 응답을 차단하고 스트림에서 JSON 데이터를 읽을 수 있습니다. 그러나 한 가지 문제가 있습니다. 스트림에서 데이터를 읽을 때 실제 데이터가 스트림에서 고갈됩니다.

    요청 / 응답의 페이로드를 쉽게 기록 할 수있는 방법은 없습니다. 자바 웹 필터를 사용하여 모든 요청과 응답을 차단하고 스트림에서 JSON 데이터를 읽을 수 있습니다. 그러나 한 가지 문제가 있습니다. 스트림에서 데이터를 읽을 때 실제 데이터가 스트림에서 고갈됩니다.

    따라서 실제 요청 및 응답 객체의 래퍼를 구현해야합니다. 요청 된 응답의 복사 된 버전 만 로깅됩니다. 우리는 다음과 같은 유사한 솔루션을 구현했으며 요구 사항을 만족 시켰습니다.

    http://www.wetfeetblog.com/servlet-filer-to-log-request-and-response-details-and-payload/431

    http://angelborroy.wordpress.com/2009/03/04/dump-request-and-response-using-javaxservletfilter/

  4. from https://stackoverflow.com/questions/12371168/how-can-i-log-restful-post-data by cc-by-sa and MIT license