如何制作更改日志?

时间:2013-12-09 14:20:04

标签: php mysql changelog

对于具有许多数据库相关事件的Web应用程序,我想构建一个Changelog。这应该记录用户所做的事情,所以它也是一个用户日志。 该应用程序非常庞大,具有复杂的基于角色的Useraccess系统,并且可能会发生数百种不同的事件(变更)。

这一切都应该是数据库驱动的,在PHP中至少需要一个View来搜索日志。

但简而言之,我完全不知道如何或设计这一切,需要一些提示或灵感,也许是其他人所做的。

2 个答案:

答案 0 :(得分:1)

我过去做过这个,基本上找到了两种方法:基于模型和基于控制器。

    模型中的
  • 基于模型的会覆盖saveupdate方法(假设 ActiveRecord 模式)来创建ChangeLog表中的新条目。

  • 基于控制器ChangeLog记录创建逻辑添加到您要跟踪的每个控制器。

我更喜欢基于控制器的方法,因为您可以更好地控制正在发生的事情以及何时发生。此外,您可以完全访问用户会话,因此可以更轻松地添加跟踪以用于审计目的。

答案 1 :(得分:0)

在我的第一个想法出现时,已经解决了这个问题。 这应该在没有评论的情况下进行多次:

protected function log($comment = ''){
    $user = $this->user();
    ORM::factory('Changelog')->vaules(array(
        'user_id' => $user->pk(),
        'section_id' => $user->section->pk(),
        'username' => $user->username.'@'.$user->section->name,
        'time' => time(),
        'uri' => $this->uri($this->request->param(), $this->request->query()),
        'controller' => $this->request->controller(),
        'action' => $this->request->action(),
        'post' => serialize($this->request->post()),
        'comment' => $comment,
    ))->save();
}

一个简单的$ this-> log(),一切都已完成。

结果:http://charterix.sourceforge.net/log.jpg