在ASP.NET MVC应用程序上记录用户活动

时间:2009-11-30 22:10:54

标签: asp.net-mvc logging audit-trail audit-logging user-activity

在ASP MVC应用程序上记录用户活动是否有好的策略? (ActionFilters / HTTPModules)。

像上次用户活动一样(就像StackOverflow“23分钟前看到的那样”),甚至是使用了Pages和Controllers,并进一步推动了点击的按钮或链接。

我安装了ELMAH,但据我所知它只是用于错误记录。

PD:谷歌分析不是一种选择。

4 个答案:

答案 0 :(得分:45)

  

警告:这是在2009年为MVC .NET RC1编写的,可能在语法上不再正确。

Action Filter Attributes非常适合这一点,只需在控制器顶部调用[YourAttributeName](或者如果你有一个其他控制器继承的应用程序控制器,你只需要一次你的申请)。

例如:

namespace the_name_space
{
    [Log]
    public class ApplicationController : Controller
    {

从此时起,将在您的控制器中运行每个操作之前调用此属性,您也可以通过以相同的方式在它之前调用[Log]来仅在操作上指定此属性。

要获得所需的日志记录功能,您很可能希望覆盖OnResultExecutingOnResultExecuted,这两者都非常自我解释。

例如:

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

联系起来