Log IIS hanya merekam informasi querystring dan header tanpa data POST.
Jika Anda menggunakan IIS7, Anda dapat mengaktifkan Pelacakan Permintaan Gagal untuk kode status 200. Itu akan merekam semua data dan Anda dapat memilih jenis data yang akan disertakan.
Di IIS6 atau 7, Anda dapat menggunakan Application_BeginRequest di global.asax dan membuat pendataan data POST Anda sendiri.
Atau, di IIS7, Anda dapat menulis Modul HTTP dengan pencatatan kustom Anda sendiri.
+1 - Saya sangat menyukai jawaban Anda, jauh lebih baik daripada jawaban saya. Saya jelas perlu membaca tentang penelusuran permintaan yang gagal, karena saya jelas belum menggunakan IIS7 sebanyak yang seharusnya.
Evan Anderson
Bagaimana Anda bisa "memilih tipe data mana yang akan dimasukkan"?
Pavel Chuchuva
1
Langkah terakhir panduan saat membuat aturan FRT memungkinkan Anda memilih data mana yang akan disertakan. Ini default untuk memasukkan semuanya.
Tidak muncul (dari url yang Andyknas bagikan) bahwa IIS "logging lanjutan" membentuk posting. Ini menawarkan opsi untuk "klien log", yang akan mencatat posting dari jenis tertentu, tetapi tidak semua posting bentuk, yang OP tampaknya meminta (dan saya bertanya-tanya tentang, saya sendiri.)
charlie arehart
8
Dalam kode yang dikelola, Anda dapat menggunakan metode Response.AppendToLog. Metode ini akan menambahkan data ke bidang cs-uri-stem - total panjang hingga 4100 karakter (tidak berdokumen). Jika Anda melebihi batas itu, maka nilai yang akan dicatat diganti dengan "..."
Misalnya, menambahkan sesuatu seperti ini ke file Global.asax Anda harus melakukan trik (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
}
}
}
}
Pada komentar ini, batasnya bukan 4100, ini 4KB yaitu 4096. Jadi kode ini perlu sedikit dimodifikasi untuk mencatat data POST> 4KB dengan benar.
Steven V
1
Saya harus menambahkan HttpContext.Current.Request.InputStream.Position = 0; sebelum request.BinaryRead, jika tidak maka akan mengembalikan array kosong
alex440
3
Sementara saya menghargai bahwa ini adalah pertanyaan lama, saya menemukan kode ini memberi saya apa yang saya butuhkan, file teks dengan header permintaan lengkap dan jawabannya, masukkan ke global.asax.cs Anda:
Ini akan membuat file teks untuk setiap permintaan (termasuk gambar) jadi berhati-hatilah saat Anda menggunakannya. Saya hanya menggunakannya untuk mencatat permintaan posting tertentu.
Tetapi perhatikan bahwa fitur FRT secara implisit membatasi jumlah file log yang dibuatnya (yang merupakan hal yang baik), jadi Anda harus mengubahnya, baik di UI atau melalui entri file konfigurasi - dan dengan hati-hati untuk volume log yang akan dibuat bahkan di aplikasi web sederhana.
charlie arehart
0
Ini terlihat menggembirakan, meskipun saya belum mencobanya:
Bagaimana ini berbeda dari opsi lain yang ditawarkan di sini, dengan kode di global.asax.cs? Itu hanya akan berfungsi untuk permintaan halaman ASP.NET, bukan halaman lain yang dapat diproses IIS (php, cgi, jsp, cfml). Tautan yang saya bagikan adalah modul yang dapat diaktifkan di IIS untuk situs apa pun (atau di tingkat server) untuk memproses segala jenis permintaan.
Jawaban:
Log IIS hanya merekam informasi querystring dan header tanpa data POST.
Jika Anda menggunakan IIS7, Anda dapat mengaktifkan Pelacakan Permintaan Gagal untuk kode status 200. Itu akan merekam semua data dan Anda dapat memilih jenis data yang akan disertakan.
Di IIS6 atau 7, Anda dapat menggunakan Application_BeginRequest di global.asax dan membuat pendataan data POST Anda sendiri.
Atau, di IIS7, Anda dapat menulis Modul HTTP dengan pencatatan kustom Anda sendiri.
sumber
Dalam kode yang dikelola, Anda dapat menggunakan metode Response.AppendToLog. Metode ini akan menambahkan data ke bidang cs-uri-stem - total panjang hingga 4100 karakter (tidak berdokumen). Jika Anda melebihi batas itu, maka nilai yang akan dicatat diganti dengan "..."
Misalnya, menambahkan sesuatu seperti ini ke file Global.asax Anda harus melakukan trik (C #):
sumber
Sementara saya menghargai bahwa ini adalah pertanyaan lama, saya menemukan kode ini memberi saya apa yang saya butuhkan, file teks dengan header permintaan lengkap dan jawabannya, masukkan ke global.asax.cs Anda:
Ini akan membuat file teks untuk setiap permintaan (termasuk gambar) jadi berhati-hatilah saat Anda menggunakannya. Saya hanya menggunakannya untuk mencatat permintaan posting tertentu.
sumber
Coba ini di file web.config Anda untuk melacak semuanya
sumber
Ini terlihat menggembirakan, meskipun saya belum mencobanya:
https://www.codeproject.com/Tips/1213108/HttpModule-for-Logging-HTTP-POST-Data-in-IIS-Log
Bagaimana ini berbeda dari opsi lain yang ditawarkan di sini, dengan kode di global.asax.cs? Itu hanya akan berfungsi untuk permintaan halaman ASP.NET, bukan halaman lain yang dapat diproses IIS (php, cgi, jsp, cfml). Tautan yang saya bagikan adalah modul yang dapat diaktifkan di IIS untuk situs apa pun (atau di tingkat server) untuk memproses segala jenis permintaan.
sumber
Coba aktifkan yang berikut ini di pengaturan log IIS Anda:
Metode (metode cs)
Batang URI (batang cs-uri)
URI Query (cs-uri-query)
sumber