web-dev-qa-db-fra.com

IIS 7 Corps de demande de journal

Je dois consigner la demande après la charge utile pour les demandes adressées à IIS. Est-il possible de configurer la journalisation des charges post-charge de la demande avec les modules de journalisation et de journalisation avancés existants dans IIS 7.5 ou peut-on me diriger vers des modules personnalisés qui me permettront de consigner la charge post-charge.

26
DMcKenna

Cela peut être fait, selon https://serverfault.com/a/90965

Les journaux IIS n'enregistrent que les informations de chaîne de requête et d'en-tête sans Aucune donnée POST.

Si vous utilisez IIS7, vous pouvez activer le traçage des demandes ayant échoué pour le code d'état 200 . Cela enregistrera toutes les données et vous pourrez sélectionner Le type de données à inclure.

16
Eugene Beresovsky

J'ai réussi à créer un fichier texte contenant la totalité de la demande (en-têtes et réponses) pour mes requêtes.

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

Espérons que cela vous aide!

4
Terry Kernan

Voici le code du module HTTP personnalisé utilisé pour consigner les données de la requête HTTP POST. 

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

    }
}

N'oubliez pas de l'enregistrer dans web.config de votre application.

Utilisez la section system.WebServer pour IIS Modèle intégré

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

Utiliser la section system.web pour IIS Modèle classique

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

Journal IIS Avant d'appliquer le module:

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

Journal IIS Après avoir appliqué le module:

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

Article complet:

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

0
Dr.