我想为我的网络应用程序的所有用户保留每个页面视图的日志。经过足够的时间后,我将使用该日志生成报告。我想让日志记录机制有点灵活,因为我不需要记录每个http请求。
示例用例是:公司注册我的Web应用程序,允许5名员工使用该应用程序。我想报告说,上周有3名员工使用了该应用程序。或者表明当年6月至8月期间有4名员工使用过它。
我正在使用带有sql server的asp.net mvc,如果这有所不同。
这就像这个一样简单吗?使用以下列创建一个sql表:UserId,ControllerName,ActionName,ActionParameters,CreatedOn。然后创建一个ActionFilterAttribute,为每个调用的操作向db添加一条记录。
是否有任何我应该担心的陷阱(除了可能很大的表格大小)?
答案 0 :(得分:6)
一些陷阱:
我认为你会在某种类型的自定义AuthorizeAttribute中实现它,所以你不要在每个控制器上编码它,但是它实际上是每个请求可能比你实际需要的更多。
您是否考虑过使用某种类型的IIS日志解析实用程序?它会有很多你需要的信息。
答案 1 :(得分:2)
如果您愿意使用JavaScript,另一个选择是您可以实现SiteCatalyst的某些功能。您在页面加载时使用JavaScript从客户端发送请求到控制器操作,并在URL中包含相应的信息。例如:
www.example.com \ AnalyticsController \ Action \ currentController \ currentAction \ userName
优点是您的日志记录不会与所有其他操作按顺序执行,您可以通过将AJAX调用放在母版页中来使其正常工作。
缺点是它使用的JavaScript可能会被禁用。恶搞也很容易。
答案 2 :(得分:0)
查看IActionFilter接口 - 您可以编写自己的类来实现这一点,并记录您需要的任何内容。