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

时间:2009-10-03 19:29:46

标签: c# asp.net-mvc

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

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

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

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

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

3 个答案:

答案 0 :(得分:6)

一些陷阱:

  1. 您将无法执行任何服务器级页面缓存。
  2. 由于您实际记录了每个请求,因此大量数据库写入。
  3. 如果页面上有任何操作,您可以存储冗余信息。
  4. 我认为你会在某种类型的自定义AuthorizeAttribute中实现它,所以你不要在每个控制器上编码它,但是它实际上是每个请求可能比你实际需要的更多。

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

答案 1 :(得分:2)

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

www.example.com \ AnalyticsController \ Action \ currentController \ currentAction \ userName

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

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

答案 2 :(得分:0)

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