"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > http.ResponseWriter को संशोधित किए बिना HTTP प्रत्युत्तरों को कैसे लॉग करें?

http.ResponseWriter को संशोधित किए बिना HTTP प्रत्युत्तरों को कैसे लॉग करें?

2024-11-09 को प्रकाशित
ब्राउज़ करें:502

How to Log HTTP Responses Without Modifying http.ResponseWriter?

http.HandleFunc में HTTP रिस्पॉन्स लॉग करना

यह आलेख नकली अनुरोधों का सहारा लिए बिना या http.ResponseWriter को संशोधित किए बिना लॉगिंग उद्देश्यों के लिए HTTP प्रतिक्रिया प्राप्त करने के वैकल्पिक दृष्टिकोण पर चर्चा करता है। हम एक कार्यात्मक शैली कार्यान्वयन प्रदान करते हुए, मिडलवेयर चेनिंग की अवधारणा पेश करते हैं। ये हैंडलर, जिन्हें मिडलवेयर के रूप में जाना जाता है, अनुरोध प्राप्त करते हैं और श्रृंखला में अगले हैंडलर को आदेशित निष्पादन सुनिश्चित करते हैं।

हम एक कस्टम मिडलवेयर फ़ंक्शन को परिभाषित करते हैं जो HTTP हैंडलर कॉम्बिनेटर के रूप में कार्य करता है:

func NewResponseLoggingHandler(अगला http.HandlerFunc) http.HandlerFunc { वापसी func(w http.ResponseWriter, r *http.Request) { // बाद के हैंडलर के लिए प्रतिक्रिया लेखक को एक रिकॉर्डर से बदलें सी := httptest.NewRecorder() अगला(सी, आर) // रिकॉर्डर से डेटा को मूल प्रतिक्रिया लेखक में कॉपी करें k, v के लिए := रेंज c.HeaderMap { w.Header()[k] = v } w.WriteHeader(सी.कोड) सी.बॉडी.राइटटू(डब्ल्यू) } }

समाधान लागू करना
func NewResponseLoggingHandler(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        // Replace the response writer with a recorder for subsequent handlers
        c := httptest.NewRecorder()
        next(c, r)

        // Copy data from the recorder to the original response writer
        for k, v := range c.HeaderMap {
            w.Header()[k] = v
        }
        w.WriteHeader(c.Code)
        c.Body.WriteTo(w)
    }
}

func NewDefaultHandler(अगला http.HandlerFunc) http.HandlerFunc { NewResponseLoggingHandler(NewOtherStuffHandler(next)) लौटाएं }

अब, NewDefaultHandler का उपयोग करके त्वरित की गई किसी भी हैंडलर श्रृंखला में स्वचालित रूप से प्रतिक्रिया लॉगिंग और अन्य डिफ़ॉल्ट व्यवहार शामिल होंगे।
func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc {
    return NewResponseLoggingHandler(NewOtherStuffHandler(next))
}
h := NewDefaultHandler(...)

निष्कर्ष
h := NewDefaultHandler(...)
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3