출처: https://www.codeproject.com/Tips/1213108/HttpModule-for-logging-HTTP-POST-data-in-IIS-Log
소개
때때로 ASP.NET 응용 프로그램에서 향후 분석 (사건 관리, 통계 등)을 위해 HTTP POST 데이터를 기록해야 할 필요가 있습니다. IIS는 표준 로깅 기능을 사용하여 HTTP GET 매개 변수를 즉시 저장하지만이 팁은 HTTP POST 데이터를 저장하는 것에 관한 것입니다. 이는 다소 까다 롭습니다. 고급 로깅이라는 또 다른 기능이있어 IIS 로그에 모든 데이터를 저장할 수 있지만이 경우 기존 웹 응용 프로그램을 변경하지 않으려는 경우 수동으로 데이터를 게시해야합니다. 그리 유용하지는 않습니다.
배경
다행히도이 문제를 해결하는 데 사용할 수있는 두 가지 훌륭한 기능이 있습니다. 첫 번째는 ASP.NET에서 사용자가 제공 한 데이터를 서버에서 생성 된 표준 IIS 로그에 추가하도록 지시하는 Response.AppendToLog 입니다 (ASP.NET net 파이프 라인의 어느 지점에서나 호출 할 수 있음). 두 번째 는 기존 웹 애플리케이션을 변경하지 않고 트릭을 수행하는 데 사용할 수있는 HttpModule 입니다.
코드 사용
솔루션에 새로운 클래스 라이브러리를 만들고 구현 한 새로운 클래스를 추가하십시오 IHttpModule
. 메소드 에있는 BeginRequest
이벤트를 구독 Init
하고 로그에 추가 할 데이터를 처리하십시오. 다음 예는 모든 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);
}
}
}
}
}
새로 생성 된 모듈을 응용 프로그램의 web.config 에 등록하는 것을 잊지 마십시오 .
IIS 통합 모델에는 system.WebServer 섹션을 사용하십시오.
<system.webServer>
<modules>
<add name="HttpPOSTLogger"
type="MySolution.HttpModules.HttpPOSTLogger, MySolution.HttpModules" />
</modules>
</system.webServer>
IIS 클래식 모델에는 system.web 섹션을 사용하십시오.
<system.web>
<httpModules>
<add name="HttpPOSTLogger"
type="MySolution.HttpModules.HttpPOSTLogger, MySolution.HttpModules"/>
</httpModules>
</system.web>
설정이 끝나면 응용 프로그램을 시작하고 몇 가지 POST
작업을 수행하십시오 . 이제 IIS ( 기본적으로 c : \ inetput \ Logs 디렉토리)에서 생성 된 로그 파일 에는 POST
" -
"기호 대신 데이터가 포함 됩니다 .
전에:
::1, -, 10/31/2017, 10:53:20, W3SVC1, machine-name, ::1, 5, 681, 662, 200, 0, POST,
/MySolution/MyService.svc/MyMethod, -,
후:
::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"}},
응용 분야
이 솔루션을 사용하면 POST
모든 요청에 대한 데이터를 저장하는 것이 디스크 저장 공간 측면에서 매우 비쌉니다. 여기서는 웹 서비스에 게시 된 매우 작은 JSON 데이터를 저장하는 데 관심이있었습니다.
노트
IIS 로깅이 아직 설정되지 않은 경우 Windows 기능 추가 / 제거 또는 서버 관리자에서 수동으로 추가 할 수 있습니다. 이렇게하면 IIS 콘솔은 다음과 같이 표시됩니다.
로그 출력 샘플은 "IIS"형식으로 제공되지만 "W3C"도 사용할 수 있습니다.