Dados do corpo da solicitação de log do IIS / POST

29

Alguém sabe como posso obter o IIS para registrar dados POST ou toda a solicitação HTTP?

    
por HopelessN00b 04.12.2009 / 03:22

5 respostas

29

Os logs do IIS registram apenas as informações de consulta e cabeçalho sem nenhum dado POST.

Se você estiver usando o IIS7, poderá ativar o Rastreamento de solicitação com falha para o código de status 200. Isso registrará todos os dados e você poderá selecionar o tipo de dados a incluir.

No IIS6 ou 7, você pode usar o Application_BeginRequest no global.asax e criar seu próprio registro de dados POST.

Ou, no IIS7, você pode escrever um Módulo HTTP com seu próprio registro personalizado.

    
por 04.12.2009 / 05:34
8

No código gerenciado, você pode usar o método Response.AppendToLog. Esse método anexará dados ao campo cs-uri-stem - o tamanho total é de até 4100 caracteres (não documentado). Se você exceder esse limite, o valor que teria sido registrado será substituído por "..."

Por exemplo, adicionar algo assim ao seu arquivo Global.asax deve funcionar (C #):

void Application_EndRequest(Object Sender, EventArgs e)
{
    if( "POST" == Request.HttpMethod )
    {
        byte[] bytes    = Request.BinaryRead(Request.TotalBytes);
        string s    = Encoding.UTF8.GetString(bytes);
        if (!String.IsNullOrEmpty(s))
        {
            int QueryStringLength = 0;
            if (0 < Request.QueryString.Count)
            {
                QueryStringLength = Request.ServerVariables["QUERY_STRING"].Length;
                Response.AppendToLog( "&" );
            }

            if (4100 > ( QueryStringLength + s.Length ) )
            {
                Response.AppendToLog(s);
            }
            else
            {
                // append only the first 4090 the limit is a total of 4100 char.
                Response.AppendToLog(s.Substring(0, ( 4090 - QueryStringLength )));
                // indicate buffer exceeded
                Response.AppendToLog("|||...|||");
                // TODO: if s.Length >; 4000 then log to separate file
            }
        }       
    }
}
 
    
por 27.02.2011 / 22:02
3

Embora eu aprecie que essa é uma pergunta antiga, descobri que esse código me deu exatamente o que eu precisava, um arquivo de texto com os cabeçalhos completos da solicitação e a resposta, coloque-o em seu global.asax.cs:

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

Isso criará um arquivo de texto para todas as solicitações (incluindo imagens), portanto, tenha cuidado onde usá-lo. Eu só usei para registrar pedidos de postagem específicos.

    
por 14.12.2012 / 10:48
0

Tente isso no seu arquivo web.config para rastrear tudo

<tracing>
  <traceFailedRequests>
    <remove path="*" />
    <add path="*">
      <traceAreas>
        <add provider="ASP" verbosity="Verbose" />
        <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
        <add provider="ISAPI Extension" verbosity="Verbose" />
        <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,FastCGI,WebSocket,Rewrite" verbosity="Verbose" />
      </traceAreas>
      <failureDefinitions timeTaken="00:00:00" statusCodes="200-999" />
    </add>
  </traceFailedRequests>
</tracing>
    
por 03.09.2016 / 01:18
-3

Tente ativar o seguinte nas configurações de log do IIS:

Método (cs-method)

URI Stem (cs-uri-stem)

Consulta URI (cs-uri-query)

    
por 04.12.2009 / 03:41