2011-08-18 13 views
25

मुझे CommonLogFormat में लॉग इन किए गए सभी SOAP अनुरोधों की आवश्यकता है (http://en.wikipedia.org/wiki/Common_Log_Format देखें), साथ ही अवधि (अनुरोध को संसाधित करने में कितना समय लगता है)।मैं स्प्रिंग वेब सर्विसेज को सभी एसओएपी अनुरोधों को कैसे लॉग कर सकता हूं?

यह करने के लिए सबसे अच्छा तरीका क्या है? ऐसा लगता है कि स्प्रिंग वेब सर्विसेज के लिए log4j को कॉन्फ़िगर करना संभव है, लेकिन क्या यह उन सभी मूल्यों को लॉग करेगा जो मुझे रूचि है? http://pijava.wordpress.com/2009/12/04/spring-webservice-soap-requestresponse-logging-with-log4j/

संपादित करें: हम वास्तव में SLF4J, नहीं Log4j उपयोग कर रहे हैं। साथ ही, ऐसा लगता है कि PayloadLoggingInterceptor को कॉन्फ़िगर करके ऐसा करना संभव है: http://static.springsource.org/spring-ws/site/reference/html/server.html#server-endpoint-interceptor

लेकिन मुझे यकीन नहीं है कि लॉग संदेश कहां जाएंगे। मैंने कहा कि हमारे इंटरसेप्टर को इंटरसेप्टर और मुझे कोई लॉग संदेश नहीं दिख रहा है।

उत्तर

29

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

<!-- Spring Webservice XML --> 
    <logger name="org.springframework.ws.client.MessageTracing"> 
    <level value="TRACE"/> 
    </logger> 
    <logger name="org.springframework.ws.server.MessageTracing"> 
    <level value="TRACE"/> 
    </logger> 

अतिरिक्त विवरण http://static.springsource.org/spring-ws/site/reference/html/common.html#logging

+0

मुझे वसंत-ws 1.5.9 – wytten

+4

में इन कक्षाओं को नहीं मिल रहा है वे कक्षाएं नहीं हैं, वे श्रेणियां हैं जो लॉग इन हैं। Http://static.springsource.org/spring-ws/site/reference/html/common.html#logging – JustinKSU

+0

पर प्रलेखन देखें PayloadLoggingInterceptor भी सहायक हो सकता है। मूल पोस्टर ने इसके लिए एक लिंक जोड़ा। – JustinKSU

16

यह मेरे लिए काम किया पर पाया जा सकता। यह भेजा गया अनुरोध संदेश लॉग और प्रतिक्रिया प्राप्त करता है। आप लॉग से लिया गया कुल समय निकाल सकते हैं।

log4j.logger.org.springframework.ws.client.MessageTracing.sent=TRACE 
log4j.logger.org.springframework.ws.client.MessageTracing.received=TRACE 
+3

जाहिर है, इसे आपके log4j.properties फ़ाइल में जोड़ा जाना चाहिए। –

7

पहला, एसएलएफ 4 जे सिर्फ एक साधारण मुखौटा है। इसका मतलब है कि आपको अभी भी एक लॉगिंग फ्रेमवर्क की आवश्यकता है (उदा। Java.util.logging, लॉगबैक, log4j)।

दूसरा, स्प्रिंग-डब्ल्यू कॉमन्स लॉगिंग इंटरफ़ेस का उपयोग करता है जो SLF4J जैसे एक और सरल मुखौटा है।

अंत में, आप स्प्रिंग-डब्ल्यूएस संदेश लॉगिंग कार्यक्षमता को सक्षम करने के लिए नीचे सेटिंग का उपयोग कर सकते हैं।

log4j.logger.org.springframework.ws.client.MessageTracing.sent=DEBUG 
log4j.logger.org.springframework.ws.client.MessageTracing.received=TRACE 

log4j.logger.org.springframework.ws.server.MessageTracing.sent=DEBUG 
log4j.logger.org.springframework.ws.server.MessageTracing.received=TRACE 
+2

यह मेरे लिए काम किया। धन्यवाद। क्या किसी को पता है कि लॉग में एसओएपी को कितना प्रिंट करना है? – theINtoy

2

web.xml में वसंत ws (org.springframework.web.servlet.DispatcherServlet साथ ले जाने के लिए) के लिए एक सर्वलेट फ़िल्टर जोड़ें

आप एक फिल्टर यहाँ http://www.wetfeetblog.com/servlet-filer-to-log-request-and-response-details-and-payload/431

अंदर प्राप्त कर सकते हैं फिल्टर आप लॉग इन कर सकते आप चाहो

5

log4j.properties फ़ाइल में निम्न को शामिल करें ...

  1. सभी सर्वर साइड संदेशों प्रवेश करने के लिए: log4j.logger.org.springframework.ws.server.MessageTracing=DEBUG
  2. सभी क्लाइंट साइड संदेशों प्रवेश करने के लिए: log4j.logger.org.springframework.ws.client.MessageTracing=TRACE

DEBUG स्तर पर - केवल पेलोड मूल तत्व

लॉग होता है पर TRACE स्तर - संपूर्ण संदेश सामग्री लॉग है

आखिरकार केवल भेजे गए या प्राप्त संदेशों को लॉग इन करने के लिएका उपयोग करें कॉन्फ़िगरेशन के अंत मेंया .received

पूर्व: log4j.logger.org.springframework.ws.server.MessageTracing.received=DEBUG लॉग क्लाइंट साइड मालिश पेलोड मूल तत्व लौटने प्राप्त किया:

DEBUG WebServiceMessageReceiverHandlerAdapter:114 - Accepting incoming [[email protected]62d9] to [http://localhost:8080/mock-platform/services] 

स्प्रिंग बूट परियोजना नीचे application.properties मेरे लिए काम किया में जोड़ने के लिए और info

25

के लिए:

logging.level.org.springframework.web=DEBUG 
logging.level.org.springframework.ws.client.MessageTracing.sent=DEBUG 
logging.level.org.springframework.ws.server.MessageTracing.sent=DEBUG 
logging.level.org.springframework.ws.client.MessageTracing.received=TRACE 
logging.level.org.springframework.ws.server.MessageTracing.received=TRACE 
1

यदि आपके पास अपनी खुद की लॉगिंग सिस्टम है तो निम्नलिखित इंटरसेप्टर SOAP संदेशों को लॉग करने का विकल्प हो सकता है।

setInterceptors(new ClientInterceptor[]{new ClientInterceptor() { 

     @Override 
     public boolean handleResponse(MessageContext messageContext) throws WebServiceClientException { 
      System.out.println("### SOAP RESPONSE ###"); 
      try { 
       ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
       messageContext.getResponse().writeTo(buffer); 
       String payload = buffer.toString(java.nio.charset.StandardCharsets.UTF_8.name()); 
       System.out.println(payload); 
      } catch (IOException e) { 
       throw new WebServiceClientException("Can not write the SOAP response into the out stream", e) { 
        private static final long serialVersionUID = -7118480620416458069L; 
       }; 
      } 

      return true; 
     } 

     @Override 
     public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException { 

      System.out.println("### SOAP REQUEST ###"); 
      try { 
       ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
       messageContext.getRequest().writeTo(buffer); 
       String payload = buffer.toString(java.nio.charset.StandardCharsets.UTF_8.name()); 
       System.out.println(payload); 
      } catch (IOException e) { 
       throw new WebServiceClientException("Can not write the SOAP request into the out stream", e) { 
        private static final long serialVersionUID = -7118480620416458069L; 
       }; 
      } 

      return true; 
     } 

     @Override 
     public boolean handleFault(MessageContext messageContext) throws WebServiceClientException { 
      System.out.println("### SOAP FAULT ###"); 
      try { 
       ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
       messageContext.getResponse().writeTo(buffer); 
       String payload = buffer.toString(java.nio.charset.StandardCharsets.UTF_8.name()); 
       System.out.println(payload); 
      } catch (IOException e) { 
       throw new WebServiceClientException("Can not write the SOAP fault into the out stream", e) { 
        private static final long serialVersionUID = 3538336091916808141L; 
       }; 
      } 

      return true; 
     } 
    }}); 

प्रत्येक संभाल विधि आप आसानी से उपयोग कर सकते हैं payload कच्चे साबुन संदेशों प्राप्त करने के लिए।

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

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