操作日志表用于记录系统用户的各类操作行为,是系统审计、问题排查和安全追溯的重要依据。以下是详细的表结构设计:
表基本信息
| 项目 | 详情 | 
|---|---|
| 表名 | 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)(查询失败操作日志) 
扩展说明
- 冗余字段设计:
usernameclient_location等冗余字段虽会增加存储,但可减少关联查询,提升日志查询效率。 - 大数据量处理:若系统日志量较大,建议定期(如按季度)归档历史数据至归档表(如 
sys_operation_log_2023_q3),避免主表数据量过大影响性能。 - 敏感信息处理:
request_paramsoperation_content中若包含密码、身份证等敏感信息,需进行脱敏处理(如用***替换关键字符)。 - 非接口操作支持:对于非接口类操作(如页面按钮点击),
request_methodrequest_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 | 
通过以上设计,可全面记录系统操作行为,满足审计、追溯和问题排查需求,同时兼顾查询效率和扩展性。
相关文章: