2010-08-19 15 views
22

मुझे आईआईएस में किए गए अनुरोधों के लिए अनुरोध पोस्ट पेलोड लॉग करने की आवश्यकता है। क्या आईआईएस 7.5 के भीतर मौजूदा लॉगिंग और उन्नत लॉगिंग मॉड्यूल के साथ अनुरोध पोस्ट पेलोड के लॉगिंग को कॉन्फ़िगर करना संभव है या कोई मुझे किसी भी कस्टम मॉड्यूल पर भेज सकता है जो मुझे पोस्ट पेलोड लॉग करने की अनुमति देगा।आईआईएस 7 लॉग अनुरोध बॉडी

उत्तर

13

यह वास्तव में किया जा सकता है, https://serverfault.com/a/90965, जो विडंबना यह है कि सवाल यह है कि डेविड सिल्वा स्मिथ यहाँ अपने जवाब में से जुड़ा हुआ, जिसमें दावा किया यह नहीं किया जा सकता करने के लिए एक जवाब है के अनुसार;)

आईआईएस लॉग केवल बिना किसी पोस्ट डेटा के क्वेरीस्ट्रिंग और हेडर जानकारी रिकॉर्ड करें।

आप IIS7 का उपयोग कर रहे हैं, तो आप स्थिति कोड 200 के लिए ट्रेसिंग कि डेटा के सभी रिकॉर्ड करेगा अनुरोध विफल सक्षम कर सकते हैं और आप डेटा के जो प्रकार का चयन कर सकते हैं शामिल करने के लिए।

protected void Application_BeginRequest(Object Sender, EventArgs e) 
{ 
    string uniqueid = Guid.NewGuid().ToString(); 
    string logfile = String.Format("C:\\path\\to\\folder\\requests\\{0}.txt", uniqueid); 
    Request.SaveAs(logfile, true); 
} 

उम्मीद है कि इस मदद करता है:

+1

आप अनुरोध शरीर इस तरह से वैसे भी ... केवल शीर्ष लेख और कुछ नैदानिक ​​जानकारी नहीं दिख रहा। – Azimuth

+4

@Azimuth मैंने इसे सत्यापित नहीं किया है, लेकिन जाहिर है कि इन क्षेत्रों में क्रमशः अनुरोध और प्रतिक्रिया का http body शामिल है: 'GENERAL_REQUEST_ENTITY' और' GENERAL_RESPONSE_ENTITY_BUFFER' –

+5

@Azimuth गलत है। मैं विफल अनुरोध ट्रेसिंग सेटअप और पूरे पोस्ट बॉडी वापस मिला। मेरी एपीआई में जो कुछ भी प्रस्तुत किया जा रहा था, उसे समझने में मेरी सहायता की: http://blogs.msdn.com/b/benjaminperkins/archive/2012/01/02/enable-and-activate-failed-request-tracing-rules.aspx ? रीडायरेक्ट = सही –

4

मुझे लगता है कि पूरे अनुरोध (हेडर और प्रतिक्रिया), मैं केवल यह प्रयोग किया जाता विशिष्ट पोस्ट अनुरोध लॉग इन करने के निहित मेरी अनुरोधों के लिए एक पाठ फ़ाइल बनाने में कामयाब रहे!

0

यहां HTTP HTTP अनुरोध कोड को लॉग करने के लिए उपयोग किए जाने वाले कस्टम HTTP मॉड्यूल का कोड है।

using System; 
using System.Web; 

namespace MySolution.HttpModules 
{ 
    public class HttpPOSTLogger : IHttpModule 
    { 

        public void Dispose() 
        { 
        } 

        public void Init(HttpApplication context) 
        { 
            context.BeginRequest += new EventHandler(context_BeginRequest); 
        } 

        private void context_BeginRequest(object sender, EventArgs e) 
        { 
            if (sender != null && sender is HttpApplication) 
            { 
                var request = (sender as HttpApplication).Request; 
                var response = (sender as HttpApplication).Response; 

                if (request != null && response != null && request.HttpMethod.ToUpper() == "POST") 
                { 
                    var body = HttpUtility.UrlDecode(request.Form.ToString()); 
                    if (!string.IsNullOrWhiteSpace(body)) 
                        response.AppendToLog(body); 
                } 
            } 
        } 

    } 
} 

इसे अपने आवेदन के web.config में पंजीकृत करना न भूलें। आवेदन करने वाले मॉड्यूल से पहले आईआईएस एकीकृत मॉडल

<system.webServer> 
    <modules> 
      <add name="HttpPOSTLogger" type="MySolution.HttpModules.HttpPOSTLogger, MySolution.HttpModules" /> 
    </modules> 
</system.webServer> 

आईआईएस क्लासिक मॉडल

<system.web> 
    <httpModules> 
   <add name="HttpPOSTLogger" type="MySolution.HttpModules.HttpPOSTLogger, MySolution.HttpModules"/> 
  </httpModules> 
</system.web> 

आईआईएस लॉग के लिए उपयोग system.web अनुभाग के लिए

उपयोग system.WebServer अनुभाग:

::1, -, 10/31/2017, 10:53:20, W3SVC1, machine-name, ::1, 5, 681, 662, 200, 0, POST, /MySolution/MyService.svc/MyMethod, -, 

आईआईएस लॉग मॉड्यूल लागू करने के बाद:

::1, -, 10/31/2017, 10:53:20, W3SVC1, machine-name, ::1, 5, 681, 662, 200, 0, POST, /MySolution/MyService.svc/MyMethod, {"model":{"Platform":"Mobile","EntityID":"420003"}}, 

पूरा लेख:

https://www.codeproject.com/Tips/1213108/HttpModule-for-logging-HTTP-POST-data-in-IIS-Log