跟踪asp.net mvc网站的用户活动/操作?

我想为我的Web应用程序的所有用户保留每个页面视图的日志。 经过足够的时间后,我将使用该日志生成报告。 我想让日志记录机制有点灵活,因为我不需要记录每个http请求。

一个示例用例是:公司注册我的Web应用程序,允许5名员工使用该应用程序。 我想报告说,上周有3名员工使用了该应用程序。 或者表明当年6月至8月期间有4名员工使用过它。

我正在使用带有sql server的asp.net mvc,如果这有所不同。

它就这么简单吗? 使用以下列创建一个sql表:UserId,ControllerName,ActionName,ActionParameters,CreatedOn。 然后创建一个ActionFilterAttribute,为每个调用的操作向db添加记录。

是否有任何我应该担心的陷阱(除了可能很大的表格大小)?

一些陷阱:

  1. 您将无法执行任何服务器级页面缓存。
  2. 由于您实际记录了每个请求,因此大量的数据库写入。
  3. 如果在页面上发生任何操作,您可以存储冗余信息。

我假设您将在某种类型的自定义AuthorizeAttribute中实现此function,因此您不需要在每个控制器上编写它,但它实际上是每个请求可能比您实际需要的更多。

您是否考虑过使用某种类型的IIS日志解析实用程序? 它会有很多你需要的信息。

如果您愿意使用JavaScript,另一个选择是您可以实现SiteCatalyst的某些function。 您在页面加载时使用JavaScript从客户端发送请求到控制器操作,并在URL中包含相应的信息。 例如:

http://www.example.com \ AnalyticsController \行动\ currentController \ currentAction \用户名

优点是您的日志记录不会与所有其他操作按顺序执行,您可以通过将AJAX调用放在母版页中来使其工作。

缺点是它使用的JavaScript可能会被禁用。 恶搞也很容易。

看看IActionFilter接口 – 您可以编写自己的类来实现这一点,并记录您需要的任何内容。