操作日志流程图
2019-07-23 11:10:26 2 举报
操作日志监控
作者其他创作
大纲/内容
1. 监听BaseActiveRecord::EVENT_AFTER_INSERT事件 2. 监听BaseActiveRecord::EVENT_BEFORE_UPDATE事件 3. 监听BaseActiveRecord::EVENT_BEFORE_DELETE事件
api是否需要监控?
1. 触发EVENT_AFTER_INSERT事件2. 判断table是否监控3. 如若监控该表,初始化RecordLog对象,记录新增前后内容,将 RecordLog对象push到$this->records[]数组中
触发EVENT_AFTER_REQUEST事件
需求要点:
否
OperationLog日志组件:'components' => [ 'operationLog' => [ 'class' => 'common\\components\\OperationLogRecord']]
执行OperationLog的init方法
保存操作记录operationLog->save()循环$this->records数组,关联operationLog,保存$record->save()入库
执行handleBeforeRequest方法,开启日志$this->app->operationLog->logBegin()
核心
return
结束
执行logBegin方法
1. 加载RequestMiddleware中间件2. 调用bootstrap方法,监听Application::EVENT_BEFORE_REQUEST事件和 Application::EVENT_AFTER_REQUEST事件
操作数据库
启动
1. 在EVENT_BEFORE_REQUEST事件中,开启日志2. 在EVENT_AFTER_REQUEST事件中,结束日志eg:public function handleBeforeRequest($e) { // 开启日志 $this->app->operationLog->logBegin(); // @todo 鉴权 } public function handleAfterRequest($e) { // 结束日志 $this->app->operationLog->logEnd(); // @todo response }
是
1. 配置bootstrap数组预加载RequestMiddleware中间件2. 配置监控信息,包括要监控的api和tables3. 添加操作日志组件OperationLogRecord
设置全局开关hasMonitorApi = true,初始化OperationLog信息,赋值给OperationLog对象return
配置
加载配置
1. 触发EVENT_BEFORE_DELETE事件2. 判断table是否监控3. 如若监控该表,初始化RecordLog对象,记 录删除前后内容,将 RecordLog对象push到$this->records[]数组中
执行handleAfterRequest方法,结束日志$this->app->operationLog->logEnd()
1. 触发EVENT_BEFORE_UPDATE事件2. 判断table是否监控 解析table中的字段是否变化3. 如若监控该表,且表中监控字段发生变化4. 记录修改前后内容,将RecordLog 对象push到$this->records[]数组中
设置全局开关hasMonitorApi = falsereturn
开启日志
触发EVENT_BEFORE_REQUEST事件
1. 删除2. 新增3.修改
执行.............
1. 修改前值$model->getOldAttributes()2. 修改后值$model->getAttributes()3. 获取所有变化属性$model->getDirtyAttributes()4.判断属性是否发生变化$model->isAttributeChanged($field)5. 如若监控字段是a.b.c的形式,解析json判断a.b.c是否变化
启动监听事件
操作日志路线图
0 条评论
回复 删除
下一页