我有一个应用程序,要求我在用户与之交互时跟踪他们。我需要记录的内容包括:用户登录、用户注销、页面视图,其中包含有关用户为获得他们所在位置所做的一些详细信息。
它是一个多用户站点,可以同时拥有多达 50 个用户。在我的脑海中,将这些东西记录到文件中可能会在大量使用期间导致 IIS 中的线程问题。
我正在寻找一些很好的理由,我应该努力使用数据库或其他日志记录方法。请记住,我目前在我的应用程序中没有任何使用数据库。所以我不热衷于在配置中添加一个。
是的,这是个好主意。但是,不要构建自己的框架。已经有很多很棒的解决方案,有些是轻量级的Log4Net
,有些是更“企业级”的EnterpriseLoggingLibrary
。
至于实施:
好吧,您将需要一个 HttpModule,或者使用一个在其中运行的依赖注入容器(如 Ninject.Web)
然后,您可以让模块中的工作线程使用日志框架(如 log4net)收集日志数据并写入文件。
最大的考虑是您打算如何使用此日志数据。如果您只想打开日志文件并查看人们在做什么,按照他们做的顺序,那么一个文件就可以正常工作。或者,如果您纯粹出于审计目的需要数据,那么在极少数情况下,您可以返回所有日志文件并解析它们以找到一些特定的有用信息,一个简单的文件可能就足够了。大多数现代日志框架都可以很好地处理并发问题。
另一方面,如果您希望能够有效地查询数据,数据库表将为您提供更多功能。例如,如果您已将时间和活动用户捕获为数据库表中的单独字段,则您可以仅查看给定用户在给定时间段内执行的操作。或者,您可以通过将错误级别消息按堆栈跟踪的顶行分组来识别常见问题,并按它们发生的每行代码的总计数对它们进行排序。
无论哪种方式,我都建议使用著名的日志框架,例如 Log4Net 或 NLog:它们可以解决您遇到的大多数问题,并且如果您将来改变主意,它们可以很容易地改变什么被记录以及它被记录到的位置。