php 一个简单的后台操作日志封装

SystemLogModel.php 为系统日志类,LogModel.php 为业务日志类。有一个全局自动根据路由写入日志(入参和响应等内容)的话更好。

php 复制代码
<?php

namespace common\models\common;


use backend\helpers\AdminHelper;
use common\helpers\MessageHelper;
use common\models\BaseModel;

class SystemLogModel extends BaseModel
{
    const MODULE_USER = '用户';
    const MODULE_ROLE = '角色';
    const MODULE_MENU = '菜单';
    const MODULE_CONFIG = '配置';
    const MODULE_QUEUE = '队列';
    const MODULE_PUSH = '推送';
    const MODULE_SUBJECT_MENU = '菜单';

    const ACTION_LOGIN = '登录';
    const ACTION_LOGOUT = '登出';
    const ACTION_NEW = '新增';
  
    const MODULE_OPTIONS = [
        self::MODULE_USER,
        self::MODULE_ROLE,
        self::MODULE_MENU,
        self::MODULE_QUEUE,
        self::MODULE_CONFIG,
    ];
    const ACTION_OPTIONS = [
        self::ACTION_LOGIN,
        self::ACTION_LOGOUT,
        self::ACTION_NEW,
        self::ACTION_EDIT,
        self::ACTION_DELETE,
        self::ACTION_UPDATE_STATUS,
        self::ACTION_RE_PUSH,
        self::ACTION_MARK_COMPLETED,
    ];

    public static function tableName()
    {
        return 'xxx_log';
    }

    public static function log($module, $action, $data)
    {
        try {
            unset($data['password']);
            unset($data['confirm_password']);
            $log = new static();
            $log->module = $module;
            $log->data = json_encode($data, JSON_FLAG);
            $log->item_id = $data['item_id'] ?? '';
            if (empty($log->item_id)) {
                $log->item_id = $data['id'] ?? '';
            }
            $log->action = $action;
            $log->username = AdminHelper::getSessionData('username');
            if (empty($log->username)) {
                $log->username = 'console';
            }
            $log->real_name = AdminHelper::getSessionData('real_name');
            if (empty($log->real_name)) {
                $log->real_name = '系统自动';
            }
            $log->save(false);
        } catch (\Throwable $e) {
            MessageHelper::send('保存后台日志异常:'.$e->getMessage().$e->getTraceAsString().',参数:'.json_encode([$module, $action, $data], JSON_FLAG));
        }
    }
}

```php
<?php

namespace common\models\common;


class LogModel extends SystemLogModel
{
    const MODULE_GOODS = '商品';
   
    const MODULE_PRIZE_ITEM = '奖品';

    const MODULE_ADMIN = '后台';

    const MODULE_INTEGRAL = '积分商品活动';
    const MODULE_DAYS_PRICE = '每日价格';
    const MODULE_ONLINE_CATE = '线上商品分类';
    const MODULE_OPTIONS = [
        self::MODULE_GOODS,
        self::MODULE_PROMOTION,
        self::MODULE_COUPON,
        self::MODULE_GOODS_LISTING,
        self::MODULE_CHANNEL,
        self::MODULE_BRAND,
        self::MODULE_COUNTER,
        self::MODULE_CLIENT,
        self::MODULE_ADMIN,
        self::MODULE_PRIZE,
        self::MODULE_PRIZE_ITEM,
        self::MODULE_ASSISTANCE
    ];

    const ACTION_INVALID = '作废';
    const ACTION_GIFT = '赠送';
    const ACTION_STOCK_RESTORE = '库存修复';
    const ACTION_ADD_CLIENT_CODES = '批量新增渠道';

    const ACTION_OPTIONS = [
        self::ACTION_NEW,
        self::ACTION_EDIT,
        self::ACTION_DISABLED,
        self::ACTION_UPDATE_STATUS,
        self::ACTION_LISTING_UP,
        self::ACTION_LISTING_DOWN,
        self::ACTION_CHECK,
        self::ACTION_INVALID,
        self::ACTION_STOCK_RESTORE,
        self::ACTION_ADD_CLIENT_CODES,
    ];

    public static function tableName()
    {
        return 'kld_log';
    }
}
复制代码
使用示例:

```php
LogModel::log(LogModel::MODULE_ONLINE_CATE, LogModel::ACTION_EDIT,$params);

日志存到表后可在后台做页面,方便快速查询。

相关推荐
BingoGo17 小时前
2025 年 PHP 常见面试题整理以及对应答案和代码示例
后端·php
Bruce1232 天前
web专题之php代审(二)
php
BingoGo2 天前
PHP-FPM 深度调优指南 告别 502 错误,让你的 PHP 应用飞起来
后端·php
亿坊电商2 天前
物联网领域中PHP框架的最佳选择有哪些?
物联网·struts·php
wuzuyu3652 天前
用php做一个简易的路由
php·路由
老六ip加速器3 天前
手机ip隔离方法
tcp/ip·智能手机·php
rockmelodies3 天前
【PHP7内核剖析】-1.3 FPM
php
真正的醒悟3 天前
上网管理行为-ISP路由部署
服务器·php·接口隔离原则
张晓~183399481213 天前
短视频矩阵源码-视频剪辑+AI智能体开发接入技术分享
c语言·c++·人工智能·矩阵·c#·php·音视频
2zcode3 天前
基于Matlab可见光通信系统中OOK调制的误码率性能建模与分析
算法·matlab·php