是否有在 ASP MVC 应用程序上记录用户活动的好策略?(ActionFilters/HTTPModules)。
类似于上次用户活动(就像 StackOverflow “23 分钟前看到”),甚至使用了什么页面和控制器,甚至进一步推动了点击了哪些按钮或链接。
我安装了 ELMAH,但据我所知,它仅用于错误记录。
PD:谷歌分析不是一个选项。
是否有在 ASP MVC 应用程序上记录用户活动的好策略?(ActionFilters/HTTPModules)。
类似于上次用户活动(就像 StackOverflow “23 分钟前看到”),甚至使用了什么页面和控制器,甚至进一步推动了点击了哪些按钮或链接。
我安装了 ELMAH,但据我所知,它仅用于错误记录。
PD:谷歌分析不是一个选项。
警告:这是 2009 年为 MVC .NET RC1 编写的,在语法上可能不再正确。
Action Filter Attributes是完美的,只需在控制器顶部调用 to [YourAttributeName]
(或者如果您有一个其他控制器继承自的应用程序控制器,您只需要在应用程序中使用一次)。
例如:
namespace the_name_space
{
[Log]
public class ApplicationController : Controller
{
从现在开始,这个属性将在每个动作在你的控制器中运行之前被调用,你也可以通过[Log]
在它之前以相同的方式调用它来指定它。
要获得您需要的日志记录功能,您很可能想要覆盖OnResultExecuting
and OnResultExecuted
,这两者都是不言自明的。
例如:
public class LogAttribute : ActionFilterAttribute
{
protected DateTime start_time;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
start_time = DateTime.Now;
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
RouteData route_data = filterContext.RouteData;
TimeSpan duration = (DateTime.Now - start_time);
string controller = (string)route_data.Values["controller"];
string action = (string)route_data.Values["action"];
DateTime created_at = DateTime.Now;
//Save all your required values, including user id and whatnot here.
//The duration variable will allow you to see expensive page loads on the controller, this can be useful when clients complain about something being slow.
}
}
我刚刚偶然发现了Rion Williams的这两篇文章,它们描述了一种非常简单的方法:
使用 ASP.NET MVC ActionFilters 实现审计跟踪
在 ASP.NET MVC 中使用 ActionFilters 创建高级审计跟踪
高级帖子真的很棒,因为您可以存储请求的数据并进一步过滤该数据。
我现在将在我的应用程序中实现这一点。
您可以尝试使用PostSharp方面为您执行日志记录,它的多播功能可能会派上用场。如果它不是一个选项,那么模块可能是最容易实现的(假设您可以在管道中的那个点获得所需的用户信息)。
@Rory 的想法很棒。PostSharp 正是您所需要的,您可以考虑将其与ASP.net Health Monitoring结合使用