MVC3记录请求的最佳方式

Lag*_*una 4 asp.net-mvc logging request asp.net-mvc-3

我想记录我的MVC 3应用程序的所有请求,包括请求的URL,用户的ip地址,用户代理等.最好的地方在哪里,

1)使用基础控制器?

2)使用动作过滤器?

3)其他人?

Len*_*rri 6

我在BaseController中执行此操作.像这样的东西:

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
    // If in Debug mode...
    if (filterContext.HttpContext.IsDebuggingEnabled)
    {
        var message = string.Format(CultureInfo.InvariantCulture,
                                    "Leaving {0}.{1} => {2}",
                                    filterContext.Controller.GetType().Name,
                                    filterContext.ActionDescriptor.ActionName.Trim(),
                                    filterContext.Result);
        Logger.Debug(message);
    }

    // Logs error no matter what
    if (filterContext.Exception != null)
    {
        var message = string.Format(CultureInfo.InvariantCulture,
                                    "Exception occured {0}.{1} => {2}",
                                    filterContext.Controller.GetType().Name,
                                    filterContext.ActionDescriptor.ActionName.Trim(),
                                    filterContext.Exception.Message);
         Logger.Error(message);
     }

     base.OnActionExecuted(filterContext);
}
Run Code Online (Sandbox Code Playgroud)

希望你明白这个主意.

您还可以在执行操作之前使用以下内容进行记录:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
Run Code Online (Sandbox Code Playgroud)


Str*_*ior 6

HttpModule如果你问我,似乎是最合适的.

在调用任何特定的Controller之前,所有关于日志记录的数据都可用.因此,如果您在控制器外部进行日志记录,那么您甚至可以捕获那些不是有效控制器操作的请求.并且不需要将控制器代码混乱,这实际上是一个跨领域的问题.