2010-08-19 41 views
22

Tôi cần phải ghi nhật ký yêu cầu tải trọng cho các yêu cầu được thực hiện cho IIS. Điều này có thể cấu hình việc ghi nhật ký các yêu cầu tải trọng đăng tải với các ghi nhật ký hiện tại và các mô-đun ghi nhật ký nâng cao trong IIS 7.5 hoặc bất kỳ ai có thể dẫn tôi đến bất kỳ mô-đun tùy chỉnh nào sẽ cho phép tôi đăng tải trọng tải bài đăng.IIS 7 Nhật ký yêu cầu cơ thể

Trả lời

13

Nó thực sự có thể được thực hiện, theo https://serverfault.com/a/90965, mà trớ trêu thay là một câu trả lời cho câu hỏi rằng David Silva Smith liên quan đến trong câu trả lời của mình ở đây, tuyên bố nó không thể được thực hiện;)

Các IIS nhật ký chỉ ghi lại thông tin chuỗi truy vấn và tiêu đề mà không cần bất kỳ dữ liệu POST nào của .

Nếu bạn đang sử dụng IIS7, bạn có thể bật theo dõi yêu cầu không thành công cho mã trạng thái 200. Điều đó sẽ ghi lại tất cả dữ liệu và bạn có thể chọn loại dữ liệu nào cần bao gồm.

+1

Bạn không thấy cơ thể yêu cầu theo cách này dù sao ... Chỉ tiêu đề và một số thông tin chẩn đoán. – Azimuth

+4

@Azimuth Tôi chưa xác minh điều này, nhưng dường như các trường này chứa nội dung http yêu cầu và phản hồi, tương ứng: 'GENERAL_REQUEST_ENTITY' và' GENERAL_RESPONSE_ENTITY_BUFFER' –

+5

@Azimuth không chính xác. Tôi thiết lập Tracing yêu cầu không thành công và lấy lại toàn bộ POST body. Giúp tôi tìm ra chính xác những gì đã được gửi đến API của tôi: http://blogs.msdn.com/b/benjaminperkins/archive/2012/01/02/enable-and-activate-failed-request-tracing-rules.aspx ? Chuyển hướng = true –

4

tôi cố gắng tạo ra một tập tin văn bản cho các yêu cầu của tôi có chứa toàn bộ yêu cầu (tiêu đề và phản ứng), tôi chỉ sử dụng nó để đăng nhập bài yêu cầu cụ thể:

protected void Application_BeginRequest(Object Sender, EventArgs e) 
{ 
    string uniqueid = Guid.NewGuid().ToString(); 
    string logfile = String.Format("C:\\path\\to\\folder\\requests\\{0}.txt", uniqueid); 
    Request.SaveAs(logfile, true); 
} 

Hy vọng rằng đây sẽ giúp bạn!

0

Đây là mã mô-đun HTTP tùy chỉnh mà chúng tôi sử dụng để ghi dữ liệu yêu cầu HTTP 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); 
                } 
            } 
        } 

    } 
} 

Đừng quên đăng ký nó trong web.config của ứng dụng của bạn.

Sử dụng system.webServer phần cho IIS Integrated Mẫu

<system.webServer> 
    <modules> 
      <add name="HttpPOSTLogger" type="MySolution.HttpModules.HttpPOSTLogger, MySolution.HttpModules" /> 
    </modules> 
</system.webServer> 

phần Sử dụng system.web cho IIS cổ điển mẫu

<system.web> 
    <httpModules> 
   <add name="HttpPOSTLogger" type="MySolution.HttpModules.HttpPOSTLogger, MySolution.HttpModules"/> 
  </httpModules> 
</system.web> 

IIS log Trước khi áp dụng mô-đun:

::1, -, 10/31/2017, 10:53:20, W3SVC1, machine-name, ::1, 5, 681, 662, 200, 0, POST, /MySolution/MyService.svc/MyMethod, -, 

IIS log Sau khi áp dụng mô-đun:

::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"}}, 

Full bài viết:

https://www.codeproject.com/Tips/1213108/HttpModule-for-logging-HTTP-POST-data-in-IIS-Log

Các vấn đề liên quan