IIS 로그 요청 본문 / POST 데이터


답변:


32

IIS는 POST 데이터없이 쿼리 문자열 및 헤더 정보 만 기록합니다.

IIS7을 사용하는 경우 상태 코드 200에 대해 실패한 요청 추적을 활성화 할 수 있습니다. 그러면 모든 데이터가 기록되며 포함 할 데이터 유형을 선택할 수 있습니다.

IIS6 또는 7에서 global.asax의 Application_BeginRequest를 사용하여 POST 데이터에 대한 고유 한 로깅을 작성할 수 있습니다.

또는 IIS7에서 사용자 지정 로깅을 사용하여 HTTP 모듈을 작성할 수 있습니다.


+1-나는 당신의 대답이 나의 것보다 훨씬 낫습니다. IIS7을 사용하지 않았으므로 분명히 실패한 요청 추적에 대해 읽어야합니다.
Evan Anderson

"포함 할 데이터 유형을 어떻게 선택할 수 있습니까?"
Pavel Chuchuva 1

1
FRT 규칙을 만들 때 마법사의 마지막 단계에서 포함 할 데이터를 선택할 수 있습니다. 기본적으로 모든 것을 포함합니다.
Scott Forsyth-MVP

IIS6에 대한 것을 찾고 있었지만이 링크를 통해 고급 로깅이 IIS7의 애드온 옵션임을 보여줍니다. iis.net/learn/extensions/advanced-logging-module/…
andyknas

IIS "고급 로깅"이 게시물을 기록하는 것은 해당 URL에서 Andyknas가 공유 한 것으로 나타나지 않습니다. 그것은 특정 종류의 게시물을 기록 것 "클라이언트 로깅"에 대한 옵션을 제공하지만, 영업 이익은 요청하는 것 같다 모든 양식 게시물 (그리고 나 자신에 대해 궁금 해서요.)하지
찰리가 arehart

8

관리 코드에서는 Response.AppendToLog 메서드를 사용할 수 있습니다. 이 방법은 cs-uri-stem 필드에 데이터를 추가합니다. 총 길이는 최대 4100 자 (문서화되지 않음)입니다. 이 제한을 초과하면 기록 된 값이 "..."으로 바뀝니다.

예를 들어 Global.asax 파일에 다음과 같은 것을 추가하면 트릭 (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
            }
        }       
    }
}
 

1
이 의견에 따르면, 제한은 4100이 아니며 4KB는 4096입니다. 따라서 POST 데이터> 4KB를 올바르게 기록하려면이 코드를 약간 수정해야합니다.
Steven V

1
HttpContext.Current.Request.InputStream.Position = 0을 추가해야했습니다. request.BinaryRead 전에, 그렇지 않으면 빈 배열을 반환합니다
alex440

3

이것이 오래된 질문이라는 것에 감사하지만이 코드는 내가 필요한 것을 정확하게 요청했습니다. 전체 요청 헤더와 응답이있는 텍스트 파일을 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);
}

이렇게하면 모든 요청 (이미지 포함)마다 텍스트 파일이 생성되므로 사용 위치에주의하십시오. 특정 게시물 요청을 기록하는 데만 사용했습니다.


1

web.config 파일에서 이것을 시도하여 모든 것을 추적하십시오.

<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>

그러나 FRT 기능은 생성하는 로그 파일의 수를 암시 적으로 제한하므로 (좋은 일임) UI 또는 구성 파일 항목을 통해 변경해야합니다. 겸손한 웹 앱에서도 생성되는 로그.
찰리 arehart

0

아직 시도하지는 않았지만 고무적인 것처럼 보입니다.

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

global.asax.cs의 코드와 함께 여기에 제공된 다른 옵션과 어떻게 다릅니 까? IIS가 처리 할 수있는 다른 페이지 (php, cgi, jsp, cfml)가 아닌 ASP.NET 페이지 요청에만 작동합니다. 내가 공유 한 링크는 IIS에서 모든 사이트 (또는 서버 수준)가 모든 유형의 요청을 처리 할 수 ​​있도록하는 모듈에 대한 것입니다.


-4

IIS 로그 설정에서 다음을 활성화하십시오.

방법 (cs-method)

URI 스템 (cs-uri-stem)

URI 쿼리 (cs-uri-query)


시도했지만 도움이되지 않았습니다 ... :(
Budda

3
이러한 설정은 POST 데이터를 포함하지 않습니다
강탈
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.