2010-10-08 11 views
12

मैं वेब सेवा पर कॉल करने के लिए RestTemplate का उपयोग कर रहा हूं।मैं स्प्रिंग रेस्ट टेम्पलेट में प्रतिक्रिया कैसे लॉग करूं?

String userId = restTemplate.getForObject(createUserUrl, String.class); 

यदि यह उपयोगकर्ता आईडी वापस करने में विफल रहता है तो मैं सिर्फ शून्य वापस आ जाता हूं लेकिन मुझे नहीं पता कि क्यों। मैं लॉग में वास्तविक XML प्रतिक्रिया कैसे आउटपुट करूं?

+0

एक्सएमएल प्रतिक्रिया क्या है? – skaffman

+0

तुम भी उपयोग कर सकते हैं LoggingRequestInterceptor सीएफ http://stackoverflow.com/a/22620168/409784 – Francois

+0

हल https://stackoverflow.com/questions/7952154/spring-resttemplate-how-to-enable-full- डीबगिंग-लॉगिंग-ऑफ-अनुरोध-प्रतिक्रियाएं/47467572 – user2746033

उत्तर

11

बाहर दिखाएगा जो HTTP कनेक्शन का उपयोग कर रहे बनाने की विधि के आधार पर आप वास्तविक HTTP कनेक्शन वर्गों के भीतर लॉगिंग मोड़ पर दिखाई दे सकता है।

log4j.logger.httpclient.wire=DEBUG 

कॉमन्स-httpclient

उदाहरण के लिए, यदि आप कॉमन्स का उपयोग कर रहे HttpClient, आप सेट कर सकते हैं परियोजना an entire page in the documentation on their logging practices है।

+1

मुझे नहीं पता कि मैं किस विधि का उपयोग कर रहा हूं, यह सब RestTemplate के हुड के नीचे है। Log4j.logger.httpclient.wire का उपयोग करना कुछ भी प्रतीत नहीं होता है। – rjsang

+0

मैं सुझाव देता हूं कि स्प्रिंग टेम्पलेट के हुड के नीचे क्या हो रहा है, यह समझने के लिए पहले वसंत के लिए लॉगिंग को चालू करना है, इससे आपको यह पता चल सकता है कि आगे कहां जाना है। –

+0

क्षमा करें, यह पुराना है लेकिन मैं इसे सही उत्तर के रूप में चिह्नित करना भूल गया! – rjsang

9

अपने लॉगिंग कॉंफ़िगर इस प्रकार है:

log4j.logger.org.springframework.web.client=DEBUG 

फिर उत्पादन को देखने के लिए एक कर्ल आदेश का उपयोग करें, जैसे

curl -H 'Accept: application/xml' -H 'Content-Type: application/xml' http://localhost:8080/ser/data 

डिफ़ॉल्ट रूप से, restTemplate HttpURlConnection का उपयोग करता है (SimpleClientHttpRequest के माध्यम से) है, तो आप की जरूरत हो सकती लॉग स्टेटमेंट देखने के लिए jakarta httpclient पर स्विच करने के लिए। अन्यथा ऊपर लॉग विन्यास आप प्रतिक्रिया

<bean id="httpClientFactory" class="org.springframework.http.client.CommonsClientHttpRequestFactory"> 
     <constructor-arg><bean class="org.apache.commons.httpclient.HttpClient"/></constructor-arg> 
    </bean> 
    <bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> 
     <constructor-arg ref="httpClientFactory"/> 
     <property name="messageConverters"> 
... 
+3

वह log4j सेटिंग अनुरोध लॉग करता है लेकिन प्रतिक्रिया नहीं। मैं कर्ल का उपयोग नहीं कर सकता क्योंकि यह एक विंडोज वातावरण है, साथ ही मैं कुछ ऐसा ढूंढ रहा हूं जो मैं कोडबेस के हिस्से के रूप में कर सकता हूं ताकि हमारे एकीकरण परीक्षणों के लिए लॉगिंग सक्षम हो सके – rjsang

+0

कर्ल के विंडोज संस्करण हैं, और सिगविन संस्करण भी हैं : http://curl.haxx.se/download.html#Win32 –

0

RestTemplate HTTP ट्रैफ़िक लॉग इन करने के लिए आप spring-rest-template-logger का उपयोग कर सकते हैं।

अपने Maven परियोजना के लिए एक निर्भरता जोड़ें:

<dependency> 
    <groupId>org.hobsoft.spring</groupId> 
    <artifactId>rest-template-logger</artifactId> 
    <version>0.1.0</version> 
</dependency> 

तब अनुकूलित अपने इस प्रकार RestTemplate के रूप में:

RestTemplate restTemplate = new RestTemplateBuilder() 
    .customizers(new LoggingCustomizer()) 
    .build() 

अब सभी RestTemplate HTTP ट्रैफ़िक डिबग स्तर पर org.hobsoft.spring.resttemplatelogger.LoggingCustomizer को लॉग इन किया जाएगा।

अस्वीकरण: मैंने इस पुस्तकालय को लिखा था।

+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं।- [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/17802986) –

+0

@ अल-मोथाफर धन्यवाद, मैंने यहां प्रासंगिक जानकारी शामिल की है। –

संबंधित मुद्दे