从 PHP 到 AI + Golang,程序员自救转型手记(五十三):管理员日志管理和日志中间件,日志标题读取的极限优化
这是一个系列 Blog作者将以一个 PHP 全栈工程师的身份利用 AI 工具claude code、codex、deepseek、豆包等从零开始学习 golang 语言并最终完成 ai-go-admingithub | gitee开源项目的制作全程记录分享。在上一期我们进行了 “管理员权限检查中间件”本期将完成管理员日志管理和日志中间件管理员日志中间件一个全局中间件对所有/admin/开头的请求生效之所以不作为分组中间件注册因为我们路由注册时可能会建立多个类似下方的分组group:r.Group(/admin/auth/admin)group:r.Group(/admin/auth/group)即我们的路由都是子模块自行负责注册的不是统一注册所以使用分组级中间件不方便。后续有改动未来会在制作 “自定义后台入口” 功能时统一注册 admin 路由的 group并将日志中间件直接注册到该 group 上就不再需要全局注册了。日志标题读取从权限规则表读取用户请求/admin/auth/admin/update接口日志中不仅要记录请求用户、请求URL、请求体等更重要的是日志标题数据最好能一眼就看出管理员干了啥。我们刚好有admin_rules表管理员的每个请求都经过了验权能验权自然于该表有权限数据/auth/admin从规则表可查出标题为管理员账号管理的权限规则/auth/admin/update从规则表可查出标题为更新的权限规则最终组装为管理员账号管理 - 更新作为日志标题看起来很完美但是一个后台请求中我们已经读了tokens、验权读了admin_rules现在为了个日志标题又加两个 SQL 查询这非常不合适所有这里让 AI 做了个在单条 SQL 查询中准备好标题的办法核心代码是这样的fmt.Sprintf(SELECT c.title, COALESCE(p.title, ) AS parent_title FROM %s AS c LEFT JOIN %s AS p ON p.id c.pid WHERE c.name ?,tableName,tableName,)控制器层、服务层指定标题这一点非常有必要比如管理员登录接口login这个接口压根不在权限规则表有记录而这个接口的日志又不得不记录那么我们可以在控制器里边c.Set(middleware.CtxAdminLogTitleKey,登录)向请求上下文设定一个自定义的日志标题日志中间件里边只需要先调用c.Next()让控制器的代码先跑即可在写入日志时读取到自定义标题数据// 检查控制器层是否已设置自定义日志标题customTitle,hasCustomTitle:c.Get(CtxAdminLogTitleKey)// 异步写入日志// 先在外面把变量提前捕获好在开 goroutine 慢慢处理和入库避免挂在请求上下文的数据随请求结束丢失等gofunc(){// ......}排除日志也不用每条请求都做记录有以下排除规则请求排除仅记录管理后台请求仅记录POST请求排除chunked请求额外排除list请求因为list请求也可能是POST筛选、排序等数据GET不够且GET直接发送json数据不方便敏感字段过滤或排除我们可以利用 GORM 的模型的创建前钩子在日志写入前对password、salt、token等敏感字段进行过滤。日志是异步写入的在模型钩子中处理可以避免解析请求体等动作拖慢用户侧响应速度。非超管只能看自己的日志在控制器和服务层直接通过拼接Where进行限制避免任何可能的越权。// 非超管则只查询自己的日志if!super{opts.Wheresappend(opts.Wheres,service.WhereGroup{Wheres:[]service.Where{{Field:admin_id,Operator:eq,Value:extension.AdminSession.ID,}},})}管理员日志管理前端请求体展示优化到这里一般的后台就是直接在日志详情直接显示JSON了比如{username: admin, password: ****, ......}不过我还是在这里用了个el-tree并写了工具函数将JSON构建为该组件可以合理使用的结构最终效果如下双击打开详情表格的默认设计是双击打开编辑稍微改一下即可另外直接将双击行的数据作为详情弹窗的数据无需额外加载。自定义一个表格行级操作按钮letoptButtons:OptButton[][{render:tip,name:info,title:详情,text:,type:primary,icon:lucide-info,class:table-row-info,click:(row:TableRow){openInfo(row)},},]利用双击单元格前钩子重写双击操作tableManager.opts.before!.columnDblclick({row}){openInfo(row)returnfalse}接下来在openInfo函数打开详情弹窗主要是tableManager.form.operate info详情弹窗那边再Info v-iftableManager.form.operate info /就行了/** * 点击查看详情按钮响应 */constopenInfo(row:TableRow){if(!row)return// 数据来自表格数据未重新请求 API深克隆不然可能会影响表格letrowClonecloneDeep(row)rowClone.datarowClone.data?[{label:点击展开,children:buildJsonToElTreeData(JSON.parse(rowClone.data))}]:[]tableManager.form.extend![info]rowClone tableManager.form.operateinfo}

相关新闻

想靠黑客技术赚钱,这份零基础入门路线图请收好

想靠黑客技术赚钱,这份零基础入门路线图请收好

从零基础到变现:网安副业的真实路径与学习方案很多人对“黑客”这个词的印象还停留在电影里的炫酷画面,觉得那是高不可攀的技术。但实际上,网络安全已经是一个高度职业化、规范化的领域。对于完全零基础的朋友来说,想靠这项技能开…

2026/8/5 18:44:24 阅读更多 →
GetQzonehistory:5分钟完成QQ空间历史说说永久备份的终极方案

GetQzonehistory:5分钟完成QQ空间历史说说永久备份的终极方案

GetQzonehistory:5分钟完成QQ空间历史说说永久备份的终极方案 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾经翻看QQ空间,发现那些承载着青春记忆的说…

2026/8/5 18:43:24 阅读更多 →
滨州网站建设公司如何打造高转化官网?从需求分析到技术落地的深度避坑指南

滨州网站建设公司如何打造高转化官网?从需求分析到技术落地的深度避坑指南

本文关键词:滨州网站建设公司在这个数字化浪潮席卷全球的今天,任何一个企业,无论你是位于繁华的一线都市,还是扎根在像滨州这样充满活力与潜力的二线城市,都无法再忽视互联网带来的巨大机遇。对于滨州的企业老板和管理者们来说,拥有一份优秀的网站已经不再是“锦上添花”…

2026/8/5 18:43:24 阅读更多 →

最新新闻

Cement-a: An Ontology-based Data Access System for Building Analytics with Multiple Data Sources

Cement-a: An Ontology-based Data Access System for Building Analytics with Multiple Data Sources

一、研究背景与问题定义 1.1 背景 数据驱动的建筑分析(如负荷预测、故障检测、系统控制)在建筑能源管理中日益重要。 为了提高建筑分析应用在不同建筑间的可移植性,业界已开发统一的数据模型(如 Brick),通…

2026/8/5 19:26:39 阅读更多 →
xxl-job 分布式调度开源系统

xxl-job 分布式调度开源系统

什么是xxl-job xxl-job 项目是分布式调度开源系统,具有开发迅速、学习简单、轻量级、易扩展等核心设计目标。 安装xxl-job 获取源码 git clone gitgithub.com:xuxueli/xxl-job.git 构建工程 进入工程目录,使用mvn命令构建工程: cd xxl…

2026/8/5 19:26:39 阅读更多 →
React + TypeScript + Redux Toolkit:企业级审批流程设计器架构解析与最佳实践

React + TypeScript + Redux Toolkit:企业级审批流程设计器架构解析与最佳实践

React TypeScript Redux Toolkit:企业级审批流程设计器架构解析与最佳实践 【免费下载链接】dingflow React 仿钉钉审批流、工作流 项目地址: https://gitcode.com/gh_mirrors/di/dingflow 在数字化转型浪潮中,企业审批流程的自动化与可视化设计…

2026/8/5 19:26:39 阅读更多 →
ExcelJS终极指南:5分钟学会JavaScript电子表格处理

ExcelJS终极指南:5分钟学会JavaScript电子表格处理

ExcelJS终极指南:5分钟学会JavaScript电子表格处理 【免费下载链接】exceljs Excel Workbook Manager 项目地址: https://gitcode.com/gh_mirrors/ex/exceljs 还在为JavaScript中处理Excel文件而烦恼吗?ExcelJS是你的完美解决方案!这个…

2026/8/5 19:26:39 阅读更多 →
Cement-[特殊字符]: An Ontology-based Data Access System for Building Analytics with Multiple Data

Cement-[特殊字符]: An Ontology-based Data Access System for Building Analytics with Multiple Data

一、研究背景与问题定义 1.1 背景 数据驱动的建筑分析(如负荷预测、故障检测、系统控制)在建筑能源管理中日益重要。 为了提高建筑分析应用在不同建筑间的可移植性,业界已开发统一的数据模型(如 Brick),通…

2026/8/5 19:26:38 阅读更多 →
深度实战:如何从零部署医院信息系统HIS并掌握核心功能

深度实战:如何从零部署医院信息系统HIS并掌握核心功能

深度实战:如何从零部署医院信息系统HIS并掌握核心功能 【免费下载链接】HIS HIS英文全称 hospital information system(医院信息系统),系统主要功能按照数据流量、流向及处理过程分为临床诊疗、药品管理、财务管理、患者管理。诊疗…

2026/8/5 19:25:38 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/5 15:00:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/5 13:13:56 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →