我想记录对我的 MVC 3 应用程序的所有请求,包括请求的 URL、用户的 IP 地址、用户代理等。最好的地方是哪里,
1)使用基本控制器?
2)使用动作过滤器?
3) 其他人?
我想记录对我的 MVC 3 应用程序的所有请求,包括请求的 URL、用户的 IP 地址、用户代理等。最好的地方是哪里,
1)使用基本控制器?
2)使用动作过滤器?
3) 其他人?
我在我的 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);
}
希望你能明白。
您还可以使用以下命令在执行操作之前记录:
protected override void OnActionExecuting(ActionExecutingContext filterContext)
如果你问我,一个HttpModule
似乎是最合适的。
在调用任何特定控制器之前,您正在谈论的所有日志记录数据都是可用的。因此,如果您在控制器外部进行日志记录,那么您甚至可以捕获那些不是有效控制器操作的请求。并且没有必要用一些真正的横切关注点来弄乱你的控制器代码。
您可以在呈现单个请求时触发多个操作方法。考虑在布局页面上使用RenderAction,如下所示:
Html.RenderAction("Navigation", "Menu")
值得注意的是,如果您选择使用操作过滤器进行日志记录,那么您将拥有两个具有相同信息的日志条目。