【问题标题】:How to change OWIN request logged by IIS如何更改 IIS 记录的 OWIN 请求
【发布时间】:2015-10-12 02:59:31
【问题描述】:

使用我的自定义 OWIN 中间件,我想捕获 GET 请求以将参数添加到查询字符串。

我不知道我是否正确,但实际上我是这样做的:

context.Request.QueryString = new QueryString(context.Request.QueryString.ToString() + "param=value")

但我也希望该请求的 IIS 日志文件条目是更新后的请求,而不是原始请求。

原始日志:

2015-07-22 09:32:35 ::1 GET /img.gif - 56782 - ::1 Mozilla/5.0+(Windows+NT+6.3;+WOW64;+Trident/7.0;+rv:11.0 )+赞+壁虎 - 200 0 0 102891

预期日志:

2015-07-22 09:32:35 ::1 GET /img.gif 参数=值 56782 - ::1 Mozilla/5.0+(Windows+NT+6.3;+WOW64;+Trident/7.0;+rv :11.0)+点赞+壁虎 - 200 0 0 102891

我该怎么做?

【问题讨论】:

  • 我不认为你可以 - 这通常是一件好事。假设您的代码出错并删除了信息。如果您不信任 IIS 日志,您如何知道触发该错误的请求的性质是什么?

标签: c# .net iis owin


【解决方案1】:

对我来说,更好的选择是创建自己的文件日志,而不是基于外部日志(在本例中为 IIS 日志)。例如,您可以使用http://nlog-project.org/ 并在你自己的 OwinMiddleware 中使用它。

public class GetMethodMiddleware : OwinMiddleware
{

    public GetMethodMiddleware(OwinMiddleware next) :
        base(next)
    { }

    public override async Task Invoke(IOwinContext context)
    {
        var logger = ObjectFactoryHost.ObjectFactory.GetObject<ILogger>();
        var requestMethod = (string)context.Request.Environment["owin.RequestMethod"];
        var requestQueryString = (string)context.Request.Environment["owin.RequestQueryString"];
        var requestPathString = (string)context.Request.Environment["owin.RequestPath"];
        logger.Info(string.Format("{0}:{1}:{2}", requestMethod, requestQueryString,requestPathString));

        await Next.Invoke(context);
    }
}

并在启动配置中使用它

app.Use(typeof(GetMethodMiddleware));

【讨论】:

  • 由于各种技术原因,我必须依赖 IIS 日志记录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多