【问题标题】:What is the best practice for logging users activity?记录用户活动的最佳实践是什么?
【发布时间】:2012-07-15 02:06:48
【问题描述】:

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

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

  • 在用户登录时,在数据库中创建一个临时表来存储用户 ID
  • 为使用该临时表中的用户 ID 在 activity 表中插入行的所有表创建触发器

现在我真的不想在数据库中放入这么多逻辑,所以我的问题是:最佳实践是什么?我应该继续使用所描述的方法,还是应该使用其他方法?

编辑 1

我已经看到this 的问题,但我很想将所描述的方法与答案中的方法进行比较。

编辑 2

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

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

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

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

【问题讨论】:

  • 在寻找“最佳实践”之前,您需要回答很多问题。为什么需要日志,这些日志必须包含什么内容,您希望每秒记录多少用户,您打算如何使用这些日志等,因为它决定了您计划部署的系统设置等。对于大多数用途,我真的看不出每次用户做某事时都会写入一个简单的表有什么问题。
  • @N.B.进行了编辑以回答您的一些问题,请查看

标签: php mysql logging


【解决方案1】:

一如既往,“视情况而定”。

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

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

【讨论】:

    【解决方案2】:

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

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

    有关延迟插入的更多信息,请参阅this link

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

    【讨论】:

    • 嗯...感谢delayed,但这并不是我真正要问的。请看我的编辑
    • 是的,这正是你所要求的,这正是你所需要的。
    • put all the logic on the PHP side 为什么?我的意思是为什么它比数据库逻辑更好?
    • 因为你想记录在 PHP 端描述的活动,而不是直接在你的数据库中——这些活动发生在你的 PHP 中,数据库只是它的后端。
    • 可以为 innoDB 引擎推荐一些东西吗?这在 innoDB 中不起作用。
    【解决方案3】:

    我真的会避免在您当前的 PHP+MySQL 设置之上添加另一层逻辑。扩展该服务将很困难,您要做的最后一件事是在您已经执行的操作之上运行查询,以获取用户采取的不同操作。我知道不会有很多用户,嗯,不是现在他们没有,但谁能知道从现在起 12 或 24 个月会发生什么。

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

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

    Logs app in Sematext.com

    其他类似的工具有

    1. Datadoghq.com
    2. Lo​​gdna.com
    3. logz.io

    它们中的大多数都带有免费套餐或免费试用版,因此您可以先试一试,然后再坚持使用,因为每种工具都有自己的优势。

    【讨论】:

      猜你喜欢
      • 2013-11-19
      • 1970-01-01
      • 2017-04-28
      • 2020-12-15
      • 2017-11-17
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      相关资源
      最近更新 更多