美文网首页
Yii框架记录后台操作日志

Yii框架记录后台操作日志

作者: Chting | 来源:发表于2021-03-03 09:17 被阅读0次

配置main.php

##在backend/config/main.php添加
#和components同级
'on beforeRequest' => function($event) {
        \yii\base\Event::on(\yii\db\BaseActiveRecord::className(),     
 \yii\db\BaseActiveRecord::EVENT_AFTER_UPDATE, ['common\models\TbLog', 'write']);##日志model和写日志静态方法
    },

配置日志model和写入方法

<?php
namespace common\models;
use Yii;
use yii\db\ActiveRecord;

class TbLog extends \common\models\BaseModel
{
    public static function tableName()
    {
        return "{{%tb_log}}";
    }

    public static function write($event)
    {
        // 排除日志表自身,没有主键的表不记录(没想到怎么记录。。每个表尽量都有主键吧,不一定非是自增id)
        if($event->sender instanceof \common\models\TbLog || !$event->sender->primaryKey()) {
            return;
        }
        $log_format = "修改 {%s} 由 {%s} 修改为 {%s},";
        $cookie = \Yii::$app->request->cookies;
        $admin_id = $cookie->getValue('uid', 0);
        $admin_name = $cookie->getValue('name', '');
        // 显示详情有待优化,不过基本功能完整齐全
        if ($event->name == ActiveRecord::EVENT_AFTER_INSERT) {
            $description = "%s新增了表%s %s:%s的%s";
        } elseif($event->name == ActiveRecord::EVENT_AFTER_UPDATE) {
            $description = "%s修改了表%s %s:%s的%s";
        } else {
            $description = "%s删除了表%s %s:%s%s";
        }

        if (!empty($event->changedAttributes)) {
            $desc = '';
            foreach($event->changedAttributes as $name => $value) {
                if ($value == $event->sender->getAttribute($name)) {
                    continue;
                }
                $desc .= sprintf($log_format, $name,$value, $event->sender->getAttribute($name));
            }
            $desc = substr($desc, 0, -1);
        } else {
            $desc = '';
        }
        $userName = $admin_name;
        $tableName = $event->sender->tableSchema->name;
        $description = sprintf($description, $userName, $tableName, $event->sender->primaryKey()[0], $event->sender->getPrimaryKey(), $desc);
        $log = new TbLog();
        $log->admin_id = $admin_id;
        $log->admin_name = $admin_name;
        $log->info = $description;
        $log->create_time = time();
        $log->save();
    }
}

可以了,只需要两步,操作时就能自动增加没个对数据库的操作日志,自行测试日志是否增加吧

相关文章

  • Yii框架记录后台操作日志

    配置main.php 配置日志model和写入方法 可以了,只需要两步,操作时就能自动增加没个对数据库的操作日志,...

  • Yii2 PHP框架

    自动加载函数 Yii2 PHP框架学习记录--自动加载函数 常量 Yii2 PHP框架学习记录-常量 $_SERV...

  • SpringBoot集成消息队列

    背景 最近在对公司开发框架进行优化,框架内涉及到多处入库的日志记录,例如登录日志/操作日志/访问日志/业务执行日志...

  • php Yii2 日志简述

    Yii提供了一个强大的日志框架,这个框架具有高度的可定制性和可扩展性。使用这个框架, 你可以轻松地记录各种类型的消...

  • Grace:优雅高效的的记录业务操作日志

    Grace[ɡreɪs]是一款业务操作日志记录框架,让我们使用更优雅方式来记录有效的、可读性高的操作日志。 项目地...

  • laravel版的my-log日志,logid查询链路日志

    1.基本介绍 1.1 项目介绍 基于laravel框架的日志,可以记录输入、输出日志、mysql操作日志,通过lo...

  • Yii2 --日志(原创翻译)

    日志 Yii提供了一个高度自定义化和高扩展性的日志框架。根据使用场景的不同,你可以很容易的对各种消息就行记录、过滤...

  • Yii 2 使用钉钉聊天机器人接收系统警报

    Yii 2 的日志管理提供了多个日志收集工具: yii\log\DbTarget: 使用数据库收集日志 yii\l...

  • 安装Yii框架

    什么是yii框架 Yii框架也叫做 易 框架。它是一个基于组件,用于开发大型WEB应用的高性能PHP框架,Yii采...

  • yii Zipkin report error Failed t

    踩坑记录,yii 框架不是很熟悉,今天需要根据业务做个一个 redis hmset 的操作,没想到一波三折。主题是...

网友评论

      本文标题:Yii框架记录后台操作日志

      本文链接:https://www.haomeiwen.com/subject/bgafqltx.html