IIS 7日志请求正文

时间:2010-08-19 14:57:29

标签: logging iis-7 request

我需要记录对IIS发出的请求的请求后有效负载。是否可以使用IIS 7.5中现有的日志记录和高级日志记录模块来配置请求后有效负载的日志记录,或者任何人都可以将我引导到任何允许我记录后有效负载的自定义模块。

3 个答案:

答案 0 :(得分:18)

根据https://serverfault.com/a/90965

,实际上可以做到
  

IIS日志仅记录查询字符串和标题信息   任何POST数据。

     

如果您使用的是IIS7,则可以启用“失败的请求跟踪”   状态代码200.这将记录所有数据,您可以选择   要包含哪种类型的数据。

答案 1 :(得分:4)

我设法为包含整个请求(标题和响应)的请求创建了一个文本文件,我只用它来记录特定的帖子请求:

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);
}

希望这有助于你!

答案 2 :(得分:0)

以下是我们用于记录HTTP POST请求数据的自定义HTTP模块的代码。

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);
                }
            }
        }

    }
}

不要忘记在你的应用程序的web.config中注册它。

对IIS集成模型使用system.WebServer部分

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

对IIS经典模型使用system.web部分

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

IIS日志在应用模块之前:

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

IIS日志应用模块后:

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

全文:

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