Spring Boot ActuatorのTrace
は、入出力HTTPのパラメータ、ヘッダ、ユーザなどをキャプチャするのに適しています。HTTPレスポンスの本体をキャプチャするように拡張したいのです。何がウェブレイヤーに入ったり出たりしているのかを知ることができます。 TraceProperties
を見ると、レスポンスボディキャプチャを設定する方法がないように見えます。レスポンスボディをキャプチャするための "安全な"方法はありますか?Spring起動アクチュエータのトレースにJSONレスポンス本文を含めるには?
10
A
答えて
2
最近、私は春ブーツアクチュエータのtrace
エンドポイントのカスタマイズについてblog postを書いて、アクチュエータで遊んでいる間、私はresponse body
をトレースするサポート特性の一つではないことをちょっと驚きました。
私はこの機能が必要かもしれないと思って、LogbackのTeeFilter
のおかげで簡単に解決策を考え出しました。
応答の出力ストリームを複製するには、あまり検討することなくTeeHttpServletResponseとTeeServletOutputStreamをコピーして使用しました。あなたはtrace
エンドポイントがありますJSONでresponseBody
を見ることができ、今
@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;
}
}
:
その後、私はブログの記事で説明したと同じように、のようなWebRequestTraceFilter
を拡張しました。
関連する問題
- 1. Spring起動時にdiskspaceとdbを表示しないアクチュエータ/ヘルスエンドポイント
- 2. スプリング・ブート・アクチュエータ - ファイルへのトレース
- 3. リクエスト/レスポンス本文をSpringのリアクティブ・アプリケーションにコピーしましたか?
- 4. jsonレスポンスに関数の値を含める
- 5. Rails JSONレスポンス内にネストされたオブジェクト/リレーションを含める
- 6. Railsアプリケーションの起動時にモデルにモジュールを含めるには?
- 7. レスポンスヘッダーをRailsでレスポンス本文の前に送信するには
- 8. SpringブートでJSONにIDを含める方法
- 9. Compojure Rest API:本文のレスポンスをJSON形式で表示
- 10. JSONレスポンスに余分な文字が含まれています
- 11. ボットからの返信の本文にフルスレッドを含める
- 12. Enunciateで生成されたドキュメントにJSONレスポンス本文の形式を含めるにはどうすればよいですか?
- 13. レスポンス本文をhtmlに表示するには
- 14. Excel VBAで転送予定のメールに本文を含める
- 15. Spring起動前処理Raw JSONデータ
- 16. PythonリクエストからHTTPレスポンス本文を抽出するには?
- 17. luaでHTTPレスポンス本文を取得するには?
- 18. POST要求にPythonで要求を含む本文を含める方法
- 19. リクエストとレスポンスのJSON本体をmitmdumpでダンプする方法は?
- 20. トレースにユーザーフレンドリーなタイムスタンプを含める方法
- 21. JSONオブジェクトに文字列レスポンスを変換するには?
- 22. 起動コンフィグレーションなしでトレースを有効にする
- 23. API文字列レスポンスをjsonレスポンスに変換するサービスはありますか?
- 24. 基本的なコントローラ設定がSpring起動時に動作しない
- 25. Hibernate JPAでSpring起動アプリケーションを起動するときにNoSuchMethodError
- 26. WCF:メッセージ本文をトレースするにはどうすればよいですか?
- 27. Spring 4 mvc REST XMLとJSONレスポンス
- 28. Spring起動アプリケーションは、起動後すぐにシャットダウンします。
- 29. JSONレスポンスに
- 30. レスポンス本文からのテキストの削除
この回答を使用しようとしました。上記の2つのクラスTeeHttpServletResponseとTeeServletOutputStreamから正確なコードをコピーしました。 Now/traceは、 "応答がコミットされた後にsendError()を呼び出せません"というメッセージを500回表示し、他のリソースは "文法エラー"という本文を200回与えてくれます。春のログでは、私はエラーを見ることができません – isADon