ไม่มีใครรู้ว่าฉันจะได้รับ IIS เพื่อบันทึกข้อมูล POST หรือคำขอ HTTP ทั้งหมดหรือไม่
ไม่มีใครรู้ว่าฉันจะได้รับ IIS เพื่อบันทึกข้อมูล POST หรือคำขอ HTTP ทั้งหมดหรือไม่
คำตอบ:
IIS บันทึกเฉพาะการสอบถามการสืบค้นและข้อมูลส่วนหัวโดยไม่มีข้อมูล POST
หากคุณใช้ IIS7 คุณสามารถเปิดใช้งานการติดตามคำขอล้มเหลวสำหรับรหัสสถานะ 200 ซึ่งจะบันทึกข้อมูลทั้งหมดและคุณสามารถเลือกประเภทของข้อมูลที่จะรวม
ใน IIS6 หรือ 7 คุณสามารถใช้ Application_BeginRequest ใน global.asax และสร้างการบันทึกข้อมูล 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 สำหรับไซต์ใด ๆ (หรือที่ระดับเซิร์ฟเวอร์) เพื่อดำเนินการตามคำขอประเภทใดก็ได้