Weyu‘s blog

  • 一、基础字段
  • 二、操作人信息
  • 三、请求环境信息
  • 四、操作结果信息
  • 五、可选字段(视需求扩展)
  • 六、字段设计示例
  • 七、设计建议
  • operation_logs 表建表 SQL[Mysql]
  • 首页
  • 代码
  • 作品
  • 学习
  • 折腾
  • 随笔
  • 关于博主
  • 时光映像
  • 我的网盘
  • 文章归档
  • 友情链接

后台管理系统[操作日志]模块的字段设计

  • admin
  • 2025-04-07
  • 0

在开发后台管理系统的过程中,操作日志模块是至关重要的一环。无论是用于行为审计、安全追踪,还是问题排查,合理的日志字段设计都能大幅提升系统可维护性和可追溯性。

本文将结合实际使用场景,梳理出一套通用、扩展性强的操作日志字段设计方案,供后台开发参考。

一、基础字段

基础字段主要记录操作行为的核心信息:

  • id:主键,自增或 UUID
  • module:功能模块名称,如“用户管理”、“资源审核”等
  • action:操作类型,如“新增”、“编辑”、“删除”、“导出”等
  • content:日志内容描述,例如“删除了用户 ID: 123”
  • log_level:日志等级,常用 info / warn / error
  • created_at:日志时间戳,记录操作发生的时间

二、操作人信息

记录操作来源用户的身份和角色:

  • operator_id:操作人 ID
  • operator_name:操作人姓名(便于展示)
  • role:操作人角色,例如 admin、editor、auditor 等

三、请求环境信息

用于追踪访问来源,便于安全审计:

  • ip_address:访问者的 IP 地址
  • user_agent:客户端设备信息(如浏览器和操作系统)
  • request_method:请求方式(GET、POST、PUT、DELETE)
  • request_url:接口地址或页面路径

四、操作结果信息

用于记录操作是否成功以及失败原因:

  • status:操作结果状态,例如 success / fail
  • error_message:失败时的错误信息,便于问题追踪
  • duration:操作耗时(单位:毫秒),用于性能分析

五、可选字段(视需求扩展)

  • params:提交的参数内容,注意应对敏感字段进行脱敏处理

六、字段设计示例

{
  "id": 123,
  "module": "用户管理",
  "action": "删除",
  "content": "删除了用户 ID: 456",
  "log_level": "info",
  "operator_id": 1,
  "operator_name": "超级管理员",
  "role": "admin",
  "status": "success",
  "request_method": "DELETE",
  "request_url": "/api/users/456",
  "ip_address": "192.168.1.100",
  "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)...",
  "params": "{\"nickname\": \"测试用户\"}",
  "duration": 85,
  "created_at": "2025-04-07T14:00:00"
}

七、设计建议

  • 日志表应支持定期归档或分表,避免数据量过大影响性能。
  • 建议为重要操作(如删除、权限修改)设置高等级日志,并支持单独筛选。
  • 记录参数内容时,应避免保存敏感信息,如密码、手机号等。

一套合理的日志字段设计,不仅有助于安全合规和数据追踪,也能为后期系统优化提供有力的数据支持。以上字段设计适用于多用户后台系统,尤其是涉及管理员与普通用户分权的场景。

可根据业务具体需求做适当裁剪或扩展,保持灵活性。

operation_logs 表建表 SQL[Mysql]

CREATE TABLE `operation_logs` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `module` VARCHAR(100) NOT NULL COMMENT '功能模块名称',
  `action` VARCHAR(50) NOT NULL COMMENT '操作类型,如新增/编辑/删除',
  `content` TEXT COMMENT '操作内容描述',
  `log_level` ENUM('info', 'warning', 'error') DEFAULT 'info' COMMENT '日志等级',
  
  `operator_id` BIGINT UNSIGNED NOT NULL COMMENT '操作人ID',
  `operator_name` VARCHAR(100) COMMENT '操作人姓名',
  `role` VARCHAR(50) COMMENT '操作人角色',

  `status` ENUM('success', 'fail') DEFAULT 'success' COMMENT '操作结果',
  `error_message` TEXT COMMENT '失败原因',

  `request_method` VARCHAR(10) COMMENT '请求方法,如GET/POST',
  `request_url` VARCHAR(255) COMMENT '请求地址',
  `params` TEXT COMMENT '请求参数(脱敏)',
  `ip_address` VARCHAR(45) COMMENT 'IP地址',
  `user_agent` VARCHAR(255) COMMENT '设备信息',
  `duration` INT UNSIGNED COMMENT '操作耗时(ms)',

  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',

  PRIMARY KEY (`id`),
  KEY `idx_operator_id` (`operator_id`),
  KEY `idx_module` (`module`),
  KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='后台操作日志表';
© 2025 Weyu‘s blog
  • {{ item.name }}
  • {{ item.name }}