在ASP MVC应用程序上记录用户活动是否有好的策略? (ActionFilters / HTTPModules)。
像上次用户活动一样(就像StackOverflow“23分钟前看到的那样”),甚至是使用了Pages和Controllers,并进一步推动了点击的按钮或链接。
我安装了ELMAH,但据我所知它只是用于错误记录。
PD:谷歌分析不是一种选择。
答案 0 :(得分:45)
警告:这是在2009年为MVC .NET RC1编写的,可能在语法上不再正确。
Action Filter Attributes非常适合这一点,只需在控制器顶部调用[YourAttributeName]
(或者如果你有一个其他控制器继承的应用程序控制器,你只需要一次你的申请)。
例如:
namespace the_name_space
{
[Log]
public class ApplicationController : Controller
{
从此时起,将在您的控制器中运行每个操作之前调用此属性,您也可以通过以相同的方式在它之前调用[Log]
来仅在操作上指定此属性。
要获得所需的日志记录功能,您很可能希望覆盖OnResultExecuting
和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.
}
}
答案 1 :(得分:21)
我偶然发现Rion Williams的这两篇帖子描述了一种非常简单的方法:
Implementing Audit Trails using ASP.NET MVC ActionFilters
Creating Advanced Audit Trails using ActionFilters in ASP.NET MVC
高级帖子非常棒,因为您可以存储请求的数据并进一步过滤该数据。
我现在将在我的应用中实现此功能。
答案 2 :(得分:6)
您可以尝试使用PostSharp方面为您执行日志记录,它的多播功能可能会派上用场。如果它不是一个选项,那么模块可能是最容易实现的(假设你可以在管道中的那一点获得所需的用户信息)。
答案 3 :(得分:2)
@Rory的想法很棒。 PostSharp正是您需要的,您可以考虑将其与ASP.net Health Monitoring
联系起来