IISにPOSTデータまたはHTTPリクエスト全体を記録させる方法を知っている人はいますか?
IISにPOSTデータまたはHTTPリクエスト全体を記録させる方法を知っている人はいますか?
回答:
IISは、POSTデータなしで、クエリ文字列とヘッダー情報のみを記録します。
IIS7を使用している場合は、ステータスコード200の失敗した要求トレースを有効にできます。これにより、すべてのデータが記録され、含めるデータの種類を選択できます。
IIS6または7では、global.asaxのApplication_BeginRequestを使用して、POSTデータの独自のログを作成できます。
または、IIS7では、独自のカスタムログを使用してHTTPモジュールを作成できます。
マネージコードでは、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
}
}
}
}
これは古い質問であることに感謝しますが、このコードは必要なものを正確に提供し、完全な要求ヘッダーと応答を含むテキストファイルを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);
}
これにより、リクエスト(画像を含む)ごとにテキストファイルが作成されるため、使用する場所に注意してください。特定の投稿要求を記録するためにのみ使用しました。
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>
私はまだ試していませんが、これは有望に見えます:
https://www.codeproject.com/Tips/1213108/HttpModule-for-Logging-HTTP-POST-Data-in-IIS-Log
global.asax.csのコードを使用して、ここで提供される他のオプションとどのように違いますか?これはASP.NETページリクエストに対してのみ機能し、IISが処理する他のページ(php、cgi、jsp、cfml)では機能しません。私が共有したリンクは、あらゆるサイト(またはサーバーレベル)のIISであらゆる種類の要求を処理できるモジュールへのリンクです。