스프링 부트 액추에이터의 트레이스에 JSON 응답 바디를 포함하는 방법은?
스프링 부트 액추에이터의Trace
입력/출력 HTTP 파라미터, 헤더, 사용자 등을 잘 캡처합니다.HTTP 응답의 본문도 캡처할 수 있도록 확장하고 싶습니다. 이렇게 하면 웹 계층에서 들어오고 나가는 내용을 전체적으로 볼 수 있습니다.지금 보니까.TraceProperties
, 응답 본문 캡처를 구성할 방법이 없는 것 같습니다.응답 본문이 어떤 캐릭터 스트림을 보내도 망치지 않고 캡처할 수 있는 "안전한" 방법이 있을까요?
최근에 Spring Boot Actuator의 커스터마이징에 대한 블로그 글을 올렸습니다.trace
엔드포인트와 액츄에이터 게임을 하면서 저는 좀 놀랐습니다.response body
추적할 수 있는 속성 중 하나가 아닙니다.
이 기능이 필요할 것 같아서 로그백 덕분에 빠른 해결책을 생각해 냈습니다.
응답의 출력 스트림을 복제하기 위해 저는 TeeHttpServletResponse와 TeeServletOutputStream을 너무 많이 검토하지 않고 복사하여 사용하였습니다.
그리고 블로그 포스트에서 설명한 것처럼 다음과 같이 확장되었습니다.
@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;
}
}
이제, 당신은 볼 수 있습니다.responseBody
JSON에서trace
엔드포인트 서비스.
스프링 유지 관리자 중 한 명으로부터:
요청 및 응답 본문을 추적하는 일이 처음부터 지원된 적이 없습니다.요청이 POST된 양식 데이터인 경우 전체 요청 본문을 읽어야 하므로 매개 변수 추적 지원이 중단되었습니다.
https://github.com/spring-projects/spring-boot/issues/12953
webflux reactive stack을 사용하면 스프링-클라우드-게이트웨이를 사용하여 http request 및 response body를 캡처하여 액츄에이터에 주입할 수 있습니다.httptrace
사용자 정의 HttpTraceWebFilter를 정의합니다.
https://gist.github.com/gberche-orange/06c26477a313df9d19d20a4e115f079f 에서 관련 코드 전체 보기
이를 위해서는 상당한 양의 중복이 필요하며, springboot 팀이 이러한 중복을 줄이는 데 도움이 되기를 바랍니다. 관련 https://github.com/spring-projects/spring-boot/issues/23907 을 참조하십시오.
언급URL : https://stackoverflow.com/questions/35848802/how-to-include-json-response-body-in-spring-boot-actuators-trace
'programing' 카테고리의 다른 글
기본 64 CLOB에 Oracle BLOB 연결 (0) | 2023.09.12 |
---|---|
장고에서 db를 리셋하는 방법은?'reset' 명령을 찾을 수 없음 오류가 발생함 (0) | 2023.09.12 |
MVC 4에서 위조 방지 쿠키 토큰과 폼 필드 토큰이 일치하지 않습니다. (0) | 2023.09.12 |
View Pager를 동적으로 업데이트하시겠습니까? (0) | 2023.09.12 |
numpy 배열을 h5py로 입력 및 출력 (0) | 2023.09.12 |