feat: 新增系统日志记录、查看与自动清理,VO 转换改用 MapStruct

- 新增访问/登录日志表与拦截器,登录成功/失败均记录,接口访问同时输出到应用日志
- 新增 /api/log/* 查询与 SSE 实时推送,运行日志默认最近 1 小时并支持日期/级别/关键字筛选
- 新增日志定时清理,保留天数可配置(默认 30 天,0 为永久保留)
- 前端新增系统日志页(独立 URL 子路径、标签偏好记忆),入口位于顶部用户下拉菜单
- 实体到视图对象的属性拷贝改用 MapStruct 编译期生成
This commit is contained in:
2026-09-18 17:18:03 +08:00
parent e49b6b7b81
commit e82e0a4ef9
38 changed files with 2464 additions and 153 deletions
+30
View File
@@ -136,3 +136,33 @@ CREATE TABLE IF NOT EXISTS t_notification_log (
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_notification_log_user_created (user_id, created_at) COMMENT '用户ID+创建时间联合索引'
);
-- HTTP 访问日志表:记录每次接口请求的方法、路径、状态与耗时,便于追溯接口调用
CREATE TABLE IF NOT EXISTS t_http_log (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '日志ID,主键自增',
user_id BIGINT COMMENT '用户ID,未登录或认证失败时为空',
method VARCHAR(10) COMMENT '请求方法:GET/POST/PUT/DELETE 等',
path VARCHAR(255) COMMENT '请求路径',
query_string VARCHAR(1000) COMMENT 'URL 查询参数',
status INT COMMENT 'HTTP 响应状态码',
duration_ms BIGINT COMMENT '处理耗时(毫秒)',
ip VARCHAR(64) COMMENT '客户端IP',
user_agent VARCHAR(500) COMMENT 'User-Agent',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_http_log_created (created_at) COMMENT '创建时间索引',
INDEX idx_http_log_user_created (user_id, created_at) COMMENT '用户ID+创建时间联合索引'
);
-- 登录日志表:记录每次登录尝试的结果,便于审计与排查
CREATE TABLE IF NOT EXISTS t_login_log (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '日志ID,主键自增',
user_id BIGINT COMMENT '用户ID,登录失败或用户不存在时为空',
username VARCHAR(50) COMMENT '登录用户名',
success TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否成功:1-成功,0-失败',
message VARCHAR(500) COMMENT '结果描述或失败原因',
ip VARCHAR(64) COMMENT '客户端IP',
user_agent VARCHAR(500) COMMENT 'User-Agent',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_login_log_created (created_at) COMMENT '创建时间索引',
INDEX idx_login_log_user_created (user_id, created_at) COMMENT '用户ID+创建时间联合索引'
);