Yii2创建程序更新和写入的日志捕捉

4 篇文章 0 订阅

需要在config/main.php中添加一个行为配置

'as adminLog' => 'backend\behaviors\AdminLogBehavior',

同时在对应的目录backend下创建行为操作文件behaviors\AdminLogBehavior

代码实现如下:

<?php
namespace backend\behaviors;
use yii\base\Application;
use yii\base\Behavior;
use Yii;
use yii\helpers\Url;
use yii\base\Event;
use yii\db\ActiveRecord;
use common\models\SystemLog;
class AdminLogBehavior extends Behavior
{
    public function events()
    {
        return [
            Application::EVENT_BEFORE_REQUEST => 'handle'
        ];
    }
    
    public function handle()
    {
        Event::on(ActiveRecord::className(), ActiveRecord::EVENT_AFTER_UPDATE, [$this, 'log']);
    }
    
    public function log($event)
    {
        // 显示详情有待优化,不过基本功能完整齐全
        if(!empty($event->changedAttributes)) {
            $desc = '';
            foreach($event->changedAttributes as $name => $value) {
                $desc .= $name . ' : ' . $value . '=>' . $event->sender->getAttribute($name) . ',';
            }
            $desc = substr($desc, 0, -1);
            $userName = Yii::$app->user->identity->username;
            $tableName = $event->sender->tableSchema->name;
            $description = "%s修改了表%s %s:%s的%s";
            $description = sprintf($description, $userName, $tableName, $event->sender->primaryKey()[0], $event->sender->getPrimaryKey(), $desc);
            $route = Url::to();
            $userId = Yii::$app->user->id;
            $ip = Yii::$app->request->userIP;
            $data = [
                'route' => $route,
                'description' => $description,
                'user_id' => $userId,
                'create_time'=>time(),
                'user_name'=>$userName,
                'ip' => $ip
            ];
            $model = new SystemLog();
            $model->setAttributes($data);
            $model->save();
        }
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值