Laravel 全局记录管理员的所有操作(Gist 版本)
链接地址 https://gist.github.com/Hanson/b8916bf13c3... (请保持点 star 的习惯)
用处
在某些系统,可能会要求记录每个管理员的操作,以防一些操作不当的责任追究(例如改错价格),此时增加全局的监听会使你省去很多不必要的代码,不用一个个控制器去增加记录。
原理
- 通过监听 laravel 自身的 eloquent.* 事件
- 筛选 model 的 created/updated/deleted 事件
- 筛选掉非管理员操作的情况(视自身情况而定)
- 如果是编辑,可以根据模型的 original 以及 attribute 判断更改的字段内容
- 存储日志结果(根据你的需求来定字段)
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
我选择用中间件,terminal 里把日志丢到Redis里再用定时任务统一写入数据库。
个人认为日志这东西要根据请求划分开,而且有时候还需要记录执行过程中的一些临时信息。真到了要查日志分析问题的时候,单记录这几个事件效果有限。
我把日志细分了5类,会员/管理员/计划任务/任务队列/回调接口,查询的时候比较方便一些

@s51983 你这个做的也很可以,不过两个都不是同一维度,一个是数据库的变化,一个是请求,不是同一维度,看具体需求吧
链接访问不了啊
谢谢,打开了我的思路
可以用
$model->getChanges()获取变化的内容 :stuck_out_tongue_winking_eye:@张铭阳 绵羊流批,新姿势
还不错,感谢分享。
有个问题值得提下,AdminLog::query()->create(。。这个操作会继续触发模型插入事件,然后会继续写入日志,这样会一直循环写日志
@search-in 嗯,你说对了,实际上这段代码我是精简出来了,还有其他判断,因为跟业务有关没写出来,这个可以加以判断即可