记录用户活动的最佳做法是什么?

时间:2012-07-16 08:37:14

标签: php mysql logging

我想为我的网络应用实施用户的活动记录(php + js + mysql)。

以前,我使用过这个方法:

  • on users login在数据库中创建临时表以存储用户id
  • 为使用该临时表中的用户ID
  • activity表中插入行的所有表创建触发器

现在我真的不想在数据库中加入太多逻辑,所以我的问题是:最佳做法是什么?我应该继续使用所描述的方法,还是应该使用别的东西?

修改1

我见过this个问题,但我很想将所描述的方法与答案中的方法进行比较。

修改2

为什么我需要日志:如果出现问题,我需要知道应该责怪哪个用户=)

日志必须包含已更改的数据和新数据,以查看实际更改的内容。

不会有很多用户因为它是一个企业应用程序而我们的公司不是那么大。

主要问题是我应该在哪里放置日志逻辑:数据库或应用程序(php后端)级别?

3 个答案:

答案 0 :(得分:10)

一如既往,“这取决于”。

如果核心业务概念随着时间的推移变得很重要,那么它应该是数据库设计中的一流概念,以及PHP逻辑。福勒在“Analysis patterns”中写道。 这使您可以捕获谁对业务对象进行了哪些更改,并回答诸如“谁将项目从类型x更改为日期z上的y?”,“用户x多久更改一次产品?”等问题。它确实使域模型更加复杂。

如果您不需要这种级别的集成,我的首选是将日志记录功能放在PHP中;触发器有一种可怕的方式来减慢数据库速度,或导致意外的副作用,或被开发人员更改架构时遗忘。因此,在PHP中,我将包含显式的“log this”语句,可能使用面向方面的框架(尽管我从未在PHP中使用过,只在Java中使用过)。

答案 1 :(得分:9)

对于日志记录,您希望有一个表logs,您可以在其中记录会话ID $_SESSION['id'](假设您有会话?)和用户的活动。然后使用延迟的MySQL查询插入它(因为日志不是高优先级):

INSERT DELAYED INTO table (session_id, activity) VALUES ('1234', 'blah');

有关DELAYED插入的详细信息,请参阅this link

换句话说,将所有逻辑放在PHP端,只需要一个MySQL表,在其中使用延迟记录任何活动。这将是一个函数log_activity($ session_id,$ activity),您可以从有可记录活动的任何地方调用它。

答案 2 :(得分:1)

我真的会避免在当前的PHP + MySQL设置之上添加另一层逻辑。扩展服务本身将很困难,最后要做的就是在已经执行的操作之上运行查询,以执行用户执行的不同操作。我知道不会有大量的用户,好吧,不是现在,他们不是,但是谁能知道从现在开始12或24个月会发生什么。

一种更简单的方法是记录所有内容,然后使用一种工具汇总这些日志并为您进行管理。以sematext.com为例。他们免费提供了日志应用程序,但有一定的局限性,但它足以让您了解它是否可以使用。

查看小日志预览屏幕。您所有的日志数据都在那里,易于阅读和理解,并且它们还具有非常简洁的过滤和搜索选项。

Logs app in Sematext.com

其他类似工具是

  1. Datadoghq.com
  2. Logdna.com
  3. logz.io

其中大多数工具都带有免费套餐或免费试用版,因此您可以在坚持使用它们之前放手一搏,因为每种工具都有自己的特长。