k10*_*102 11 php mysql logging
我想为我的网络应用程序实现用户的活动记录(php
+ js
+ mysql
).
以前,我用过这个appoach:
activity
使用该临时表中的用户ID 在表中插入行的所有表创建触发器现在我真的不想在数据库中加入太多逻辑,所以我的问题是:最佳实践是什么?我应该继续使用所描述的方法,还是应该使用其他方法?
编辑1
我已经看到了这个问题,但我很想将所描述的方法与答案中的方法进行比较.
编辑2
为什么我需要日志:如果出现问题,我需要知道应该责怪哪个用户=)
日志必须包含已更改的数据和新数据,以查看实际更改的内容.
不会有很多用户因为它是一个企业应用程序,我们的公司不是那么大.
主要问题是我应该在哪里放置日志逻辑:数据库或应用程序(php后端)级别?
Nev*_*uyt 12
一如既往,"这取决于".
如果核心业务概念随着时间的推移变得重要,那么它应该是数据库设计中的一流概念,以及PHP逻辑.福勒在" 分析模式 "中写到了这一点.这使您可以捕获谁对业务对象进行了哪些更改,并回答诸如"谁将项目从类型x更改为日期z上的y?","用户x多久更改一次产品?"等问题.它确实使域模型更复杂.
如果您不需要这种级别的集成,我的首选是将日志记录功能放在PHP中; 触发器有一种可怕的方式来减慢数据库速度,或导致意外的副作用,或被开发人员更改架构时遗忘.因此,在PHP中,我将包含显式的"log this"语句,可能使用面向方面的框架(尽管我从未在PHP中使用过,只在Java中使用过).
对于日志记录,您希望有一个表logs
,您可以在其中记录会话ID $_SESSION['id']
(假设您有会话?)和用户的活动.然后使用延迟的MySQL查询插入它(因为日志不是高优先级):
INSERT DELAYED INTO table (session_id, activity) VALUES ('1234', 'blah');
Run Code Online (Sandbox Code Playgroud)
有关DELAYED插入的更多信息,请参阅此链接.
换句话说,将所有逻辑放在PHP端,只需要一个MySQL表,在其中使用延迟记录任何活动.这将是一个函数log_activity($ session_id,$ activity),您可以从有可记录活动的任何地方调用它.