操作日志表用于记录系统用户的各类操作行为,是系统审计、问题排查和安全追溯的重要依据。以下是详细的表结构设计:
表基本信息
项目 | 详情 |
---|---|
表名 | sys_operation_log |
存储引擎 | InnoDB(支持事务) |
字符集 | utf8mb4 |
排序规则 | utf8mb4_general_ci |
字段设计
字段名 | 数据类型 | 长度 / 精度 | 是否主键 | 允许为空 | 默认值 | 字段说明 |
---|---|---|---|---|---|---|
id |
BIGINT | - | 是 | 否 | 自增 | 日志记录唯一标识,自增主键 |
operation_id |
VARCHAR | 64 | 否 | 否 | 无 | 操作唯一编号(可使用 UUID,用于跨系统关联) |
user_id |
BIGINT | - | 否 | 是 | NULL | 操作用户 ID(未登录用户可为 NULL) |
username |
VARCHAR | 50 | 否 | 是 | NULL | 操作用户名(冗余字段,方便查询) |
operation_module |
VARCHAR | 100 | 否 | 否 | 无 | 操作所属模块(如:用户管理、订单管理、系统设置) |
operation_type |
VARCHAR | 50 | 否 | 否 | 无 | 操作类型(如:新增、修改、删除、查询、登录、退出、导入、导出) |
operation_content |
TEXT | - | 否 | 是 | NULL | 操作具体内容(如:修改用户状态为禁用;删除订单 ID:20230822001) |
request_method |
VARCHAR | 20 | 否 | 是 | NULL | 请求方式(如:GET、POST、PUT、DELETE,接口操作时记录) |
request_url |
VARCHAR | 500 | 否 | 是 | NULL | 请求接口 URL(如:/api/user/update,接口操作时记录) |
request_params |
TEXT | - | 否 | 是 | NULL | 请求参数(JSON 格式存储,如:{"userId":1001,"status":0}) |
response_result |
VARCHAR | 20 | 否 | 否 | 无 | 操作结果(成功、失败) |
error_msg |
TEXT | - | 否 | 是 | NULL | 错误信息(操作失败时记录具体异常信息,成功时为 NULL) |
client_ip |
VARCHAR | 50 | 否 | 否 | 无 | 操作客户端 IP 地址 |
client_location |
VARCHAR | 200 | 否 | 是 | NULL | IP 归属地(如:北京市 阿里云,可通过 IP 解析工具获取) |
client_browser |
VARCHAR | 200 | 否 | 是 | NULL | 客户端浏览器(如:Chrome 116.0.0.0) |
client_os |
VARCHAR | 100 | 否 | 是 | NULL | 客户端操作系统(如:Windows 10) |
operation_time |
DATETIME | - | 否 | 否 | 无 | 操作时间(精确到秒) |
execution_time |
INT | - | 否 | 是 | 0 | 操作执行耗时(毫秒,接口操作时记录,非接口操作可为 0) |
create_time |
DATETIME | - | 否 | 否 | CURRENT_TIMESTAMP | 记录创建时间(默认当前时间) |
索引设计
为提升查询效率,建议创建以下索引:
- 主键索引:
PRIMARY KEY (id)
(默认自动创建) - 普通索引:
INDEX idx_user_id (user_id)
(按用户查询日志) - 普通索引:
INDEX idx_operation_time (operation_time)
(按时间范围查询日志) - 联合索引:
INDEX idx_module_type_time (operation_module, operation_type, operation_time)
(按模块、类型、时间组合查询) - 普通索引:
INDEX idx_response_result (response_result)
(查询失败操作日志)
扩展说明
- 冗余字段设计:
username
client_location
等冗余字段虽会增加存储,但可减少关联查询,提升日志查询效率。 - 大数据量处理:若系统日志量较大,建议定期(如按季度)归档历史数据至归档表(如
sys_operation_log_2023_q3
),避免主表数据量过大影响性能。 - 敏感信息处理:
request_params
operation_content
中若包含密码、身份证等敏感信息,需进行脱敏处理(如用***
替换关键字符)。 - 非接口操作支持:对于非接口类操作(如页面按钮点击),
request_method
request_url
等字段可留空或标记为 “非接口操作”。
示例数据
id | operation_id | user_id | username | operation_module | operation_type | operation_content | client_ip | response_result | operation_time |
---|---|---|---|---|---|---|---|---|---|
1 | 8f7d2b1c-3e4a-5d6b-7c8d-9e0f1a2b3c4d | 1001 | admin | 用户管理 | 修改 | 修改用户 ID:1002 的状态为禁用 | 192.168.1.100 | 成功 | 2025-08-22 10:30:25 |
2 | 9a8b7c6d-5e4f-3g2h-1j0k-8l7m6n5o4p3q | NULL | NULL | 登录模块 | 登录 | 用户登录尝试 | 223.104.18.56 | 失败 | 2025-08-22 11:15:42 |
通过以上设计,可全面记录系统操作行为,满足审计、追溯和问题排查需求,同时兼顾查询效率和扩展性。
相关文章: