2010-08-19 9 views
22

Ich muss die Anfrage nach Payload für Anfragen an IIS protokollieren. Ist es möglich, die Protokollierung von Request-Post-Payloads mit den vorhandenen Logging- und erweiterten Logging-Modulen in IIS 7.5 zu konfigurieren, oder kann mich jemand zu irgendwelchen benutzerdefinierten Modulen leiten, die es mir erlauben, die Post-Payloads zu protokollieren.IIS 7 Log Request Body

Antwort

13

Es kann tatsächlich getan wird, nach https://serverfault.com/a/90965, der ironischerweise eine Antwort auf die Frage, die David Silva Smith hier in seiner Antwort verknüpft und behauptete, es nicht getan werden kann;)

Die IIS protokolliert nur Querystring und Header-Informationen ohne POST-Daten.

Wenn Sie IIS7 verwenden, können Sie für Statuscode aktiviert fehlgeschlagen 200. Tracing-Anforderung, die alle Daten aufzeichnen und Sie wählen können , welche Art von Daten zu enthalten.

+1

Sie sehen nicht den Wunsch Körper auf diese Weise trotzdem ... Nur einige diagnostische Informationen Header und. – Azimuth

+4

@Azimuth Ich habe dies nicht verifiziert, aber anscheinend enthalten diese Felder den http Körper der Anfrage bzw. Antwort: 'GENERAL_REQUEST_ENTITY' und' GENERAL_RESPONSE_ENTITY_BUFFER' –

+5

@Azimuth ist falsch. Ich habe die Ablaufverfolgung für fehlgeschlagene Anfragen eingerichtet und den gesamten POST-Nachrichtentext zurückgeholt. Hat mir geholfen herauszufinden, was genau an meine API gesendet wurde: http://blogs.msdn.com/b/benjaminperkins/archive/2012/01/02/enable-and-activate-failed-request-tracing-rules.aspx ? Redirected = true –

4

ich es geschafft, eine Textdatei für meine Anfragen zu erstellen, die die gesamte Anforderung enthalten (Header und Antwort), habe ich es nur bestimmte Post-Anfragen zu protokollieren:

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); 
} 

Hoffentlich hilft Ihnen!

0

Hier ist der Code des benutzerdefinierten HTTP-Moduls, das wir verwenden, um HTTP-POST-Anfragedaten zu protokollieren.

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); 
                } 
            } 
        } 

    } 
} 

Vergessen Sie nicht, es in web.config Ihrer Anwendung zu registrieren.

Verwenden system.webServer Abschnitt für IIS Integrated Modell

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

Verwenden system.web Abschnitt für IIS klassisches Modell

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

II-Protokoll Vor der Anwendung Modul:

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

IIS log Nach dem Anwenden des Moduls:

::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"}}, 

Vollständiger Artikel:

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