Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 记录用户活动的最佳实践是什么?_Php_Mysql_Logging - Fatal编程技术网

Php 记录用户活动的最佳实践是什么?

Php 记录用户活动的最佳实践是什么?,php,mysql,logging,Php,Mysql,Logging,我想为我的web应用程序(php+js+mysql)实现用户活动日志记录 以前,我用过这种方法: 在用户登录时,在数据库中创建一个临时表来存储用户id 使用临时表中的用户id,为在活动表中插入行的所有表创建触发器 现在我真的不想在数据库中放这么多逻辑,所以我的问题是:什么是最佳实践?我应该继续使用所描述的方法,还是应该使用其他方法 编辑1 我看到了这个问题,但我感兴趣的是将所描述的方法与答案中的方法进行比较 编辑2 为什么我需要日志:如果出现问题,我需要知道该责怪哪个用户=) 日志必须包含更

我想为我的web应用程序(
php
+
js
+
mysql
)实现用户活动日志记录

以前,我用过这种方法:

  • 在用户登录时,在数据库中创建一个临时表来存储用户id
  • 使用临时表中的用户id,为在
    活动
    表中插入行的所有表创建触发器
现在我真的不想在数据库中放这么多逻辑,所以我的问题是:什么是最佳实践?我应该继续使用所描述的方法,还是应该使用其他方法

编辑1

我看到了这个问题,但我感兴趣的是将所描述的方法与答案中的方法进行比较

编辑2

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

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

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


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

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

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

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

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

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


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

我真的不想在您当前的PHP+MySQL设置之上添加另一层逻辑。扩展该服务虽然很困难,但您最不想做的就是在您已经执行的操作之上运行查询,以获得用户执行的不同操作。我知道不会有太多的用户,好吧,现在不是,他们不是,但是谁能知道12或24个月后会发生什么

一个更简单的方法是记录所有内容,然后使用一个工具来聚合这些日志并为您管理这些日志。比如说。他们免费提供他们的logs应用程序,但有一些限制,但它应该足以让你了解这是不是你可以使用的东西

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

其他类似工具包括

  • Datadoghq.com
  • Logdna.com
  • logz.io

  • 他们中的大多数都有一个免费的层或免费试用,这样你就可以在坚持使用之前试一试,因为每种工具都有自己的长处

    在寻找“最佳实践”之前,你需要回答很多问题。您为什么需要日志,这些日志必须包含哪些内容,您希望每秒记录多少用户,您打算如何使用这些日志等。因为它决定了您计划部署的系统设置等。对于大多数用途,我真的看不出一个简单的表格有什么问题,它在用户每次做某事时都会被写入。@N.B.做了一个编辑来回答您的一些问题,请看一看。。。谢谢你延迟了,但这并不是我真正想要的。请看我的编辑是的,这确实是您所要求的,也是您所需要的。
    将所有逻辑放在PHP端
    为什么?我的意思是为什么它比db logic更好?因为您希望记录PHP端描述的活动,而不是直接记录在数据库中——这些活动发生在PHP中,数据库只是其后端。可以为innoDB引擎提供一些建议吗?这在innoDB中不起作用。
    INSERT DELAYED INTO table (session_id, activity) VALUES ('1234', 'blah');