क्या किसी को पता है कि मैं पोस्ट डेटा या संपूर्ण HTTP अनुरोध लॉग करने के लिए IIS कैसे प्राप्त कर सकता हूं?
क्या किसी को पता है कि मैं पोस्ट डेटा या संपूर्ण HTTP अनुरोध लॉग करने के लिए IIS कैसे प्राप्त कर सकता हूं?
जवाबों:
IIS केवल किसी भी POST डेटा के बिना क्वेरिस्ट्रिंग और हेडर जानकारी रिकॉर्ड करता है।
यदि आप IIS7 का उपयोग कर रहे हैं, तो आप स्टेटस कोड 200 के लिए असफल अनुरोध अनुरेखण सक्षम कर सकते हैं। यह सभी डेटा को रिकॉर्ड करेगा और आप चुन सकते हैं कि किस प्रकार का डेटा शामिल करना है।
IIS6 या 7 दोनों में, आप Global.asax में Application_BeginRequest का उपयोग कर सकते हैं और POST डेटा की अपनी लॉगिंग बना सकते हैं।
या, IIS7 में, आप अपने स्वयं के कस्टम लॉगिंग के साथ एक HTTP मॉड्यूल लिख सकते हैं।
प्रबंधित कोड में आप Response.AppendToLog विधि का उपयोग कर सकते हैं। यह विधि सीएस-यूरी-स्टेम क्षेत्र में डेटा को जोड़ देगी - कुल लंबाई 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
यह वैश्विक.सैक्स. कोड में कोड के साथ यहां दिए गए अन्य विकल्प से कैसे भिन्न है? यह केवल ASP.NET पृष्ठ अनुरोधों के लिए काम करेगा, न कि अन्य पृष्ठ IIS प्रक्रिया (php, cgi, jsp, cfml) की प्रक्रिया कर सकते हैं। मैंने जो लिंक साझा किया है वह एक ऐसे मॉड्यूल के लिए है जो किसी भी प्रकार के अनुरोध के लिए संसाधित करने के लिए किसी भी साइट (या सर्वर स्तर पर) के लिए IIS में सक्षम हो सकता है।