Spring Boot Actuator的Trace
在捕獲輸入/輸出HTTP params,頭文件,用戶等方面做得很好。我想擴展它來捕獲HTTP響應的主體,這樣我就可以全面瞭解什麼是進入和離開網絡層。看看TraceProperties
,看起來好像沒有辦法配置響應主體捕獲。是否有一種「安全」的方式來捕捉響應主體而不會搞亂它發回的任何字符流?如何在Spring Boot Actuator的跟蹤中包含JSON響應體?
10
A
回答
2
最近,我寫了一個關於定製Spring Boot Actuator的trace
端點的blog post,並且在使用Actuator時,我有點驚訝response body
不是支持的屬性之一。
我想我可能需要這個功能,並且由於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 trace
端點提供看responseBody
。
相關問題
- 1. Spring-boot Actuator SSL配置
- 2. Spring Boot Actuator給CPU使用
- 3. Spring oauth在發送請求時在響應正文中包含堆棧跟蹤
- 4. 如何使用Spring Boot在JSON中包含ID
- 5. 如何在Spring Boot中獲得完整的HttpServletResponse響應體?
- 6. 如何將HandlerInterceptor應用於Spring Boot Actuator端點?
- 7. spring-boot-starter-web-reactive + spring-boot-starter-actuator不能一起工作嗎?
- 8. spring-boot-actuator-docs覆蓋spring-boot-rest-docs輸出
- 9. Spring Boot Actuator路徑默認未啓用?
- 10. Spring Boot Actuator Management端點異常處理
- 11. Spring Boot Actuator - 自定義健康端點
- 12. Spring Boot Actuator - 啓用單端點
- 13. 在Spring Boot中只包含單獨的實體JPA測試
- 14. Spring Boot Actuator在Docker上返回應用程序
- 15. 如何在Spring Boot中自動包含整個Freemarker模板包?
- 16. 如何驗證Spring Boot Rest響應?
- 17. 在json響應中包含函數值
- 18. Rails - 在json響應中包含關聯
- 19. 如何使用Spring Boot支持json和html響應
- 20. 如何在Rails中的JSON響應中包含Cookie?
- 21. OpenCV 3.0包含跟蹤器
- 22. json響應包含\ n \ r
- 23. Spring Boot 1.5.4在json響應中篩選出空值
- 24. 在Spring Boot中自定義JSON響應以更改鍵名
- 25. 在SOAP Web服務中無法訪問Spring Boot Actuator端點
- 26. 如何在Node.js中跟蹤相應請求的響應對象
- 27. 如何將響應實體包含在Swagger中的主模板響應中?
- 28. 如何在我的Json響應中包含數組名稱?
- 29. 如何啓用WebAPI響應跟蹤?
- 30. 如何在跟蹤中包含用戶友好的時間戳
我試着用這個答案。複製了上面的確切代碼和TeeHttpServletResponse和TeeServletOutputStream兩個類。現在/跟蹤給我500與「無法調用響應後提交的sendError()提交」,和任何其他資源給我200身體「語法錯誤」。在春天日誌中我看不到任何錯誤 – isADon