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

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

用处

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

原理

  • 通过监听 laravel 自身的 eloquent.* 事件
  • 筛选 model 的 created/updated/deleted 事件
  • 筛选掉非管理员操作的情况(视自身情况而定)
  • 如果是编辑,可以根据模型的 original 以及 attribute 判断更改的字段内容
  • 存储日志结果(根据你的需求来定字段)

php吹水交流群 570769430

Hanson
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 8

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

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

file

2周前 评论
张三 2周前
s51983 (作者) 2周前
萧晔离 2周前
s51983 (作者) 2周前
萧晔离 2周前
Hanson

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

2周前 评论
jcc123

链接访问不了啊

2周前 评论

谢谢,打开了我的思路

2周前 评论

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

2周前 评论
Hanson

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

2周前 评论

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

2周前 评论
Hanson

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

2周前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!