
EasyAdmin 操作日志系统解析按月分表记录用户操作的设计思路【免费下载链接】easyadmin框架主要使用ThinkPHP6.0 layui拥有完善的权限的管理模块以及敏捷的开发方式让你开发起来更加的舒服。项目地址: https://gitcode.com/gh_mirrors/easy/easyadminEasyAdmin 是一个基于 ThinkPHP6.0 layui 构建的开源后台管理框架内置了完善的权限管理模块。其中它的操作日志模块设计得非常巧妙——采用按月分表的方式记录后台用户的操作行为既保证了写入性能又让日志查询、清理变得异常轻松。这篇文章就来拆解 EasyAdmin 操作日志按月分表的设计思路帮助新手理解这套优雅的日志方案。为什么操作日志要按月分表后台管理系统的操作日志有一个典型特点数据量增长极快但价值具有时效性。管理员每一次登录、增删改查都会被记录下来一个月轻松积累几十万甚至上百万条数据。如果所有日志都堆在一张表里会带来两个痛点 单表数据量过大insert写入变慢页面查询也卡顿 想清理过期日志时delete大表数据性能极差还容易锁表按月分表则完美解决了这两个问题写入分散到不同月份的表查询按需定位清理直接删表即可。这就是 EasyAdmin 选择按月分表的核心动机。EasyAdmin 按月分表的核心实现模型动态表名EasyAdmin 操作日志分表的关键代码藏在模型SystemLog的构造函数里。我们来看 app/admin/model/SystemLog.php 的核心逻辑public function __construct(array $data []) { parent::__construct($data); $this-name system_log_ . date(Ym); }模型实例化时自动把表名设置为system_log_当前年月例如 2026 年 8 月就是system_log_202608。同时模型还提供了setMonth()方法支持按指定月份切换表名为后续的按月查询打下基础。动态建表日志表自动创建光有分表思路还不够月份更替后新表从哪来EasyAdmin 的解决方案是写入时自动检测、自动建表整个过程完全不需要人工干预。核心实现在 app/admin/service/SystemLogService.php服务采用单例模式实例化时从配置读取表前缀拼出完整的按月表名save()方法写入前先调用detectTable()检测表是否存在若表不存在则通过getCreateSql()动态生成建表语句并立即执行整个流程可以用一句话概括首次写入某月日志时自动建好该月的表。这意味着系统跑多久都不需要人工建表运维成本几乎为零。操作日志是怎么被记录下来的EasyAdmin 通过全局中间件无侵入地记录日志开发者完全不用在业务代码里写任何日志逻辑。中间件定义在 app/admin/middleware/SystemLog.php主要做了三件事 只记录POST、PUT、DELETE这类写操作的Ajax 请求避免无意义的查询请求刷屏 对敏感字段自动脱敏如password、phone、mobile统一替换为******防止密码等隐私信息落库 收集管理员 ID、请求地址、请求方法、真实 IP、User-Agent、操作内容等字段调用日志服务写入对应月份的表这个设计非常贴心自动脱敏从源头杜绝了敏感信息泄露也让日志数据可以放心长期保存。按月查询前端筛选 后端定位分表之后查询也得跟着月份走。EasyAdmin 的日志列表页 app/admin/controller/system/Log.php 实现了按月切换查询前端 log.js 默认展示当月日志并提供一个月份选择器用户选择月份后后端通过setMonth($month)动态切换到对应月份的日志表列表支持按操作人、请求方法、路由地址、IP、创建时间范围等条件筛选并关联查询操作人信息前端页面上日志字段一目了然后台用户、请求方法、路由地址、日志标题、操作内容、IP 地址、创建时间等配合 layui 表格的搜索功能排查问题非常顺手。按月分表方案的优缺点总结维度表现写入性能✅ 单表数据量可控写入稳定查询效率✅ 按月份定位表查询速度快数据清理✅ 直接 DROP 旧月份表秒级完成代码复杂度⚠️ 需要动态表名 自动建表逻辑跨月统计⚠️ 需要遍历多张表稍显繁琐总体来看按月分表是日志类数据最经典的实践方案尤其适合中小型后台管理系统。EasyAdmin 通过模型动态表名 服务层自动建表 中间件自动记录把整套方案封装得开箱即用。总结EasyAdmin 的操作日志系统用很轻量的代码实现了三个关键能力按月自动分表、写入时自动建表、按月份灵活查询。它没有引入复杂的中间件或定时任务纯粹依靠 PHP 层面对表名的动态控制就把日志模块打理得井井有条。对新手来说这套设计是一份很好的学习样板——理解了 SystemLog 模型 与 SystemLogService 的配合方式你就掌握了动态表名的常见套路未来遇到类似的数据分片需求时也能举一反三。【免费下载链接】easyadmin框架主要使用ThinkPHP6.0 layui拥有完善的权限的管理模块以及敏捷的开发方式让你开发起来更加的舒服。项目地址: https://gitcode.com/gh_mirrors/easy/easyadmin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考