[SPRING] Spring Boot Actuator Trace에 JSON 응답 본문을 포함시키는 방법?
SPRINGSpring Boot Actuator Trace에 JSON 응답 본문을 포함시키는 방법?
스프링 부트 액츄에이터의 추적 기능은 입출력 HTTP 매개 변수, 헤더, 사용자 등을 캡쳐하는 작업을 잘 수행합니다. HTTP 응답의 본문을 캡처하도록 확장하고 싶습니다. 그런 식으로 전체 내용을 볼 수 있습니다. 웹 레이어에서 들어오고 나간다. TraceProperties를 보면 응답 본문 캡처를 구성하는 방법이없는 것처럼 보입니다. 답신 본문을 다시 보내려는 문자 스트림을 망쳐 놓지 않고 응답 본문을 캡처하는 "안전한"방법이 있습니까?
해결법
-
==============================
1.최근 스프링 부트 액추에이터의 추적 끝점을 사용자 정의하는 블로그 게시물을 작성했으며 액추에이터를 가지고 노는 동안 응답 바디가 추적 할 수있는 지원되는 속성 중 하나가 아닌 것에 놀랐습니다.
최근 스프링 부트 액추에이터의 추적 끝점을 사용자 정의하는 블로그 게시물을 작성했으며 액추에이터를 가지고 노는 동안 응답 바디가 추적 할 수있는 지원되는 속성 중 하나가 아닌 것에 놀랐습니다.
이 기능이 필요할 수도 있고 Logback의 TeeFilter 덕분에 빠른 해결책을 찾았습니다.
응답의 출력 스트림을 복제하기 위해 너무 많은 시험없이 TeeHttpServletResponse 및 TeeServletOutputStream을 복사하여 사용했습니다.
그런 다음 블로그 게시물에서 설명한 것처럼 확장 된 WebRequestTraceFilter는 다음과 같습니다.
@Component public class RequestTraceFilter extends WebRequestTraceFilter { RequestTraceFilter(TraceRepository repository, TraceProperties properties) { super(repository, properties); } @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { TeeHttpServletResponse teeResponse = new TeeHttpServletResponse(response); filterChain.doFilter(request, teeResponse); teeResponse.finish(); request.setAttribute("responseBody", teeResponse.getOutputBuffer()); super.doFilterInternal(request, teeResponse, filterChain); } @Override protected Map<String, Object> getTrace(HttpServletRequest request) { Map<String, Object> trace = super.getTrace(request); byte[] outputBuffer = (byte[]) request.getAttribute("responseBody"); if (outputBuffer != null) { trace.put("responseBody", new String(outputBuffer)); } return trace; } }
이제 JSON 추적 엔드 포인트에서 responseBody가 작동하는 것을 볼 수 있습니다.
from https://stackoverflow.com/questions/35848802/how-to-include-json-response-body-in-spring-boot-actuators-trace by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] XML 대신 java config를 사용하여 저장소 populator bean을 선언하는 방법? (0) | 2019.04.03 |
---|---|
[SPRING] 싱글 톤의 여러 인스턴스를 만드는 봄? (0) | 2019.04.03 |
[SPRING] Spring / MVC 3.0 앱에서 타일이있는 일반적인 오류 페이지 템플릿을 어떻게 만들 수 있습니까? (0) | 2019.04.03 |
[SPRING] 파일 시스템에서 파일에 대한 property-placeholder 사용법 (0) | 2019.04.03 |
[SPRING] 소켓에서 예기치 않은 EOF 읽기와 함께 파일 정지를 업로드합니다. 예외 (0) | 2019.04.03 |