在Application_Error和LINQ查询中使用Log4net打印有用的输出

时间:2014-11-06 16:40:21

标签: c# asp.net linq asp.net-mvc-5 log4net

我对这些内容不熟悉,但我尝试做的是过滤log4net日志,我已经通过一些特定的信息来填充Application_Error,例如HTTP_USER_AGENT REQUEST TYPE CONTENT_TYPE HTTP_REFERER。

我到目前为止的代码是:

string[] vars = {"IP address", "X-Forwarded-For", "HTTP_USER_AGENT","REQUEST TYPE","CONTENT_TYPE","HTTP_REFERER"};
var param = Request.Params;

var paramEnum = param.GetEnumerator();
while (paramEnum.MoveNext())
{
    foreach (var paramVar in vars.Where(paramVar => paramVar == paramEnum.Current.ToString()))
    {
        Log.Error("\nparam:" + paramVar);
    }
}

但它看起来很难看,而且我认为我在简洁的LINQ查询方面并没有走上正轨,尤其是同时使用while和foreach循环。

我说LINQ的新手就像我说的那样,resharper为我创建了LINQ - 如果你觉得我缺少某些领域,请让我知道我需要什么才能进一步理解集合/查询。

这是最有效的做事方式,还是我完全走错了路?

1 个答案:

答案 0 :(得分:0)

最好迭代vars而不是

        foreach (var paramVar in vars)
        {
            var value = Request.Params.Get(paramVar);
            if (!string.IsNullOrEmpty(value))
            {
                Log.Error("\nparam:" + paramVar);
            }
        }

或使用LINQ

        var query = from paramVar in vars
            let value = Request.Params.Get(paramVar)
            where !string.IsNullOrEmpty(value)
            select paramVar;

        foreach (var paramVar in query)
        {
            Log.Error("\nparam:" + paramVar);
        }