MySQL-php怎样做个日志系统记录网站的一切操作,嵌入原网站中,不是log日志是用数据库的。
公司内部管理系统,php的。
网站需要做个功能,就是把所有用户的一切涉及数据库操作的(除了查询的其他动作,例如插入修改删除)动作都记录到数据库中,并输出到页面。
就是个日志记录功能。需要的信息有:
操作人,操作时间,操作名称,操作类型。
这个应该如何架构???网站系统每条非查询sql的地方都再加一条sql把这条sql的日志插到日志表里???工作量好大。
还是有什么比较简单的办法。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
最简单的就是记录真实触发数据库变化的请求,如果是mvc的话,也就是记录每次牵涉到数据库更改的action和当时的操作人,基本上就可以知道做什么mysql的什么操作。
复杂一点的,可以进行通过封装mysql_query(类似这样的操作mysql)的函数,绝对不允许使用php原生函数,select和不改变数据库的统一用封装好的query(通过检查sql是否有insert/update/replace等,有的话禁止),更新数据库的用封装好的update执行,那么你所要做的就是把通过封装好update的sql记录下来就可以了。
如果你没有用框架的话,自己写的程序并且带有SQL语句的话非常简单,只要把执行的SQL语句复制到变量上,然后写入到文件中就可以看到了,下面是一个开源工程的例子:
$sql = "INSERT INTO ".$configValues['CONFIG_DB_TBL_RADUSERGROUP']." (uid,UserName,GroupName,priority) "." VALUES ('$uid','".$dbSocket->escapeSimple($username)."', '".$dbSocket->escapeSimple($group)."',0) ";
$res = $dbSocket->query($sql);
$logDebugSQL .= $sql . "n";
只要你把$logDebugSQL 写入到数据库或者文件中,或者直接echo到当前页面就可以实现debug信息输出了
这个只是修改你的数据库DB类就可以了,在你的insert、update、delete等操作方法里加上一个MyAddLog方法就可以了
这个MyAddLog方法你自己定义到DB类里,比如:
public function MyAddLog($action,$opter,$opttime,$sql)
{
//生成日志
}
再比如下面是删除记录方法:
public function MyDelete($where="") //{{{ 删除
{
if (empty($where))
return;
$sql = "DELETE FROM ".$this->dataTableName." WHERE " . $where;
$this->Execute($sql);
$this->MyAddLog('delete',$opter,time(),$sql);//这里$opter可以通过session来保存获取
}