Laravel 全局记录管理员的所有操作(Gist 版本)

链接地址 https://gist.github.com/Hanson/b8916bf13c3... (请保持点 star 的习惯)

用处

在某些系统,可能会要求记录每个管理员的操作,以防一些操作不当的责任追究(例如改错价格),此时增加全局的监听会使你省去很多不必要的代码,不用一个个控制器去增加记录。

原理

  • 通过监听 laravel 自身的 eloquent.* 事件
  • 筛选 model 的 created/updated/deleted 事件
  • 筛选掉非管理员操作的情况(视自身情况而定)
  • 如果是编辑,可以根据模型的 original 以及 attribute 判断更改的字段内容
  • 存储日志结果(根据你的需求来定字段)
本作品采用《CC 协议》,转载必须注明作者和本文链接
❤️ 微信生态自动智能化方案加微信:hansonskr ❤️ 备注:vbot
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 8

我选择用中间件,terminal 里把日志丢到Redis里再用定时任务统一写入数据库。
个人认为日志这东西要根据请求划分开,而且有时候还需要记录执行过程中的一些临时信息。真到了要查日志分析问题的时候,单记录这几个事件效果有限。

我把日志细分了5类,会员/管理员/计划任务/任务队列/回调接口,查询的时候比较方便一些
file

file

4年前 评论
张三 4年前
s51983 (作者) 4年前
萧晔离 4年前
s51983 (作者) 4年前
萧晔离 4年前
Charsen 3年前
s51983 (作者) 3年前
Charsen 3年前

@s51983 你这个做的也很可以,不过两个都不是同一维度,一个是数据库的变化,一个是请求,不是同一维度,看具体需求吧

4年前 评论
jcc123

链接访问不了啊

4年前 评论

谢谢,打开了我的思路

4年前 评论

可以用 $model->getChanges() 获取变化的内容 :stuck_out_tongue_winking_eye:

4年前 评论

@张铭阳 绵羊流批,新姿势

4年前 评论

还不错,感谢分享。
有个问题值得提下,AdminLog::query()->create(。。这个操作会继续触发模型插入事件,然后会继续写入日志,这样会一直循环写日志

4年前 评论

@search-in 嗯,你说对了,实际上这段代码我是精简出来了,还有其他判断,因为跟业务有关没写出来,这个可以加以判断即可

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!