2010-08-19 21 views
22

IIS'ye yapılan istekler için istek sonrası yükü günlüğe kaydetmem gerekiyor. Bu, IIS 7.5'deki varolan günlük kaydı ve gelişmiş günlük modülleriyle istek sonrası yüklerin günlüğe kaydedilmesini yapılandırabilir veya herhangi bir kişi beni gönderi yükünü günlüğe kaydetmeme izin verecek herhangi bir özel modüle yönlendirebilir.IIS 7 Günlük İstek Gövde

cevap

13
Aslında yapılabilir

, ironik David Silva Smith onu yapılamaz iddia buraya onun cevabını bağlantılı sorusuna yanıt olduğunu https://serverfault.com/a/90965 göre;)

IIS herhangi bir POST verisi olmadan sadece kayıt sorgularını ve başlık bilgilerini kaydeder.

IIS7'yi kullanıyorsanız, durum kodu 200 için Başarısız İstek Takibini etkinleştirebilirsiniz. Bu, tüm verileri kaydeder ve dahil edilecek veri türünü seçebilirsiniz.

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

Umarım bu size yardımcı olur:

+1

Bu yolu zaten ... Sadece başlık istek gövdesini ve bazı tanısal bilgi görmüyorum. – Azimuth

+4

@Azimuth ben bu doğrulanmadı, ama görünüşe göre bu alanlar sırasıyla istek ve yanıt, http gövdesini içerir: 'GENERAL_REQUEST_ENTITY' ve' GENERAL_RESPONSE_ENTITY_BUFFER' –

+5

@Azimuth yanlıştır. Başarısız İstek Takibini kurdum ve tüm POST gövdesini geri aldım. API'mma tam olarak nelerin gönderildiğini bulmama yardımcı oldu: http://blogs.msdn.com/b/benjaminperkins/archive/2012/01/02/enable-and-activate-failed-request-tracing-rules.aspx ? Yönlendirmeli = true –

4

I (başlıkları ve yanıtı), sadece belirli yazılan istekleri günlüğe için kullandı tamamını isteği içeren benim istekleri için bir metin dosyası oluşturmak için başardı! İşte

0

biz HTTP POST isteği verisine açmak için kullandığınız özel HTTP modülünün kodudur.

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

    } 
} 

Uygulamanızın web.config dosyasına kaydetmeyi unutmayın. uygulamadan modül önce IIS Klasik Model

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

IIS günlüğü için IIS Entegre Modeli

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

Kullanım system.web bölüm için

Kullanım system.webServer bölümü:

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

IIS log uygulandıktan sonra:

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

Tam makale:

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