[解決済み] Spring RestTemplate - リクエスト/レスポンスの完全なデバッグ/ロギングを有効にするには?
質問
私はしばらくの間、Spring RestTemplateを使用していますが、リクエストとレスポンスをデバッグしようとしているとき、常に壁にぶつかっています。私は基本的に、"verbose"オプションをオンにしてcurlを使用したときに見るのと同じものを見たいと思っています。たとえば、次のようなものです。
curl -v http://twitter.com/statuses/public_timeline.rss
送信データと受信データ(ヘッダー、クッキーなどを含む)の両方を表示します。
私は、いくつかの関連記事をチェックしました。 Spring RestTemplateで応答を記録する方法は? しかし、私はこの問題を解決することができませんでした。
一つの方法は、実際にRestTemplateのソースコードを変更し、そこに追加のログステートメントを追加することですが、私はこのアプローチが本当に最後の手段であることを見つけるでしょう。Spring Web Client/RestTemplateに、より友好的な方法ですべてをログに記録するように指示する方法があるはずです。
私の目標は、このようなコードでできるようになることです。
restTemplate.put("http://someurl", objectToPut, urlPathValues);
そして、ログファイルやコンソールに(curlで得られるような)同じタイプのデバッグ情報を得ることができます。 これはSpring RestTemplateを使用していて問題がある人にとって非常に便利だと思います。RestTemplateの問題をデバッグするためにcurlを使用することは、(場合によっては)うまくいきません。
解決するには?
ようやく正しい方法を見つけました。 解決策の大部分は SpringとSLF4Jを設定して、ログを取得できるようにするには?
やるべきことは2つあるようです。
-
log4j.propertiesに以下の行を追加してください。
log4j.logger.httpclient.wire=DEBUG
- Spring がロギング設定を無視しないようにします。
2つ目の問題は、(私の場合のように)slf4jを使用しているspring環境で起こることがほとんどです。 そのため、slf4jが使用されている場合、次の2つのことが起こることを確認してください。
-
クラスパスにcommons-loggingライブラリがない:これはpomに除外記述子を追加することで可能です。
<exclusions><exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions>
-
log4j.propertiesファイルは、springが見つける/見ることができるクラスパスのどこかに格納されています。もし、これに問題がある場合、最後の手段の解決策は、デフォルトのパッケージにlog4j.propertiesファイルを置くことです(良い習慣ではありませんが、物事があなたの期待通りに動くことを確認するためだけです)。
関連
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] java.lang.ClassCastException: java.util.Arrays$ArrayList は java.util.ArrayList にキャストできません。
-
[解決済み] java.util.concurrent.ExecutionException 例外をどのように処理しますか?
-
[解決済み] プロトコルハンドラの初期化に失敗しました。
-
[解決済み] ORA-01654: インデックスを拡張できません。
-
[解決済み] どのように配列の10未満の値(x * 2)を倍増するコードを取得するには?(Java)
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] Node.js の console.log() で '[Object]' ではなく、完全なオブジェクトを取得するにはどうすればよいですか?
-
[解決済み】Spring Boot。application.propertiesでロギングレベルを設定するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JVMフラグCMSClassUnloadingEnabledは、実際に何をするのですか?
-
[解決済み] この配列の中の数字を入れ替えるには、何が足りないのでしょうか?ジャバ
-
[解決済み] enumのordinalを使用するのは良い習慣ですか?
-
[解決済み] パラメータ[変数]の不正な修飾子;finalのみが許可される[closed]。
-
[解決済み] Java UnknownFormatConversionException
-
[解決済み] JOGLまたはLWJGLの既成のプロジェクト
-
[解決済み] javax.mail.MessagingException: SMTPホストに接続できませんでしたか?
-
[解決済み] Mavenです。JARは空になります - 含有するためにマークされたコンテンツがありません
-
[解決済み] 文字列の長さに応じて文字列をトリミングする
-
[解決済み] Spring ApplicationContext - リソースリーク: 'context' が閉じられない