2012-09-11 19 views
10

हमारे पास स्प्रिंग एमवीसी के माध्यम से आरईएसटी सेवाओं का खुलासा किया गया है। हम अपवाद लॉग करने के लिए HandlerExceptionResolver का उपयोग करते हैं।मैं रीस्टफुल पोस्ट डेटा कैसे लॉग कर सकता हूं?

  • अपवाद और उसके स्टैक ट्रेस
  • यूआरएल
  • अनुरोध हेडर

यह अगर हम भी रूप में JSON पोस्ट डेटा लॉग इन कर आसान डिबगिंग बनाना होगा: हम वर्तमान में निम्नलिखित लॉग इन करें कुंआ। इसे कैसे प्राप्त करें इस पर कोई सुझाव?

उत्तर

10

आपको एक फ़िल्टर की आवश्यकता है जो इसे पढ़ने के बाद अनुरोध निकाय को सहेज लेगा और बाद में सहेजे गए डेटा को आपके अपवाद लॉगर में प्रदान करेगा।

वसंत में AbstractRequestLoggingFilter है जो समान काम करता है। हालांकि यह आपकी समस्या के लिए सीधे उपयुक्त नहीं है, लेकिन आप इसे अपने स्वयं के फ़िल्टर को लागू करने के संदर्भ के रूप में उपयोग कर सकते हैं।

+1

आप स्प्रिंग उपयोग कर रहे हैं बाहर टिप्पणी करने के लिए हो सकता है 4.1.3+ (देखें एसपीआर-12477), अपने MVC डिस्पैचर सर्वलेट करने के लिए अपने फिल्टर मैप करने के लिए सुनिश्चित करें और नहीं करने के लिए '/* ', या आपका अनुरोध आवश्यक 'ContentCachingRequestWrapper' में लपेटा नहीं जाएगा। –

+1

@ LászlóvandenHoek, क्या आप विस्तृत कर सकते हैं? मैं तुम्हारा पीछा नहीं करता मैं 'ContentCachingRequestWrapper' का उपयोग कर रहा हूं, लेकिन अनुरोध निकाय हमेशा एक खाली स्ट्रिंग है। –

+0

@ अहिजिथ माधव फ़िल्टर उन्हें या तो यूआरएल पैटर्न या सर्वलेट पर मैप करके सक्षम कर रहे हैं। मेरा मतलब यह था कि आपको यह सुनिश्चित करने की ज़रूरत है कि आप अपने प्रेषक को अपने 'AbstractRequestLoggingFilter' को मानचित्र करें, न कि '/ *' URL पैटर्न पर। –

4

अनुरोध/प्रतिक्रिया के पेलोड को लॉग करने का कोई आसान तरीका नहीं है। आप सभी अनुरोधों और प्रतिक्रियाओं को रोकने और स्ट्रीम से JSON डेटा पढ़ने के लिए जावा वेब फ़िल्टर का उपयोग कर सकते हैं। लेकिन एक समस्या है, जब आप स्ट्रीम से डेटा पढ़ेंगे तो वास्तविक डेटा स्ट्रीम से समाप्त हो जाएगा।

इसलिए, आपको वास्तविक अनुरोध और प्रतिक्रिया वस्तु के रैपर को लागू करना होगा। अनुरोध प्रतिक्रिया का केवल कॉपी संस्करण लॉग किया जाएगा। इस प्रकार की तरह हम समान समाधान को लागू किया है और यह हमारे आवश्यकता पूरी कर:

http://www.wetfeetblog.com/servlet-filer-to-log-request-and-response-details-and-payload/431

http://angelborroy.wordpress.com/2009/03/04/dump-request-and-response-using-javaxservletfilter/

16

वर्ग आवेदन के लिए विन्यास का प्रतिनिधित्व करने के लिए इस जोड़ें:

import javax.servlet.Filter; 
import javax.servlet.http.HttpServletRequest; 
import org.springframework.web.filter.AbstractRequestLoggingFilter; 

....

@Bean 
public Filter loggingFilter(){ 
    AbstractRequestLoggingFilter f = new AbstractRequestLoggingFilter() { 

     @Override 
     protected void beforeRequest(HttpServletRequest request, String message) { 
      System.out.println("beforeRequest: " +message); 
     } 

     @Override 
     protected void afterRequest(HttpServletRequest request, String message) { 
      System.out.println("afterRequest: " +message); 
     } 
    }; 
    f.setIncludeClientInfo(true); 
    f.setIncludePayload(true); 
    f.setIncludeQueryString(true); 

    f.setBeforeMessagePrefix("BEFORE REQUEST ["); 
    f.setAfterMessagePrefix("AFTER REQUEST ["); 
    f.setAfterMessageSuffix("]\n"); 
    return f; 
} 

आप

f.setIncludePayload(true); 
संबंधित मुद्दे

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