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
@@ -0,0 +1,59 @@
package cn.rosercode.finance.service;
import cn.rosercode.finance.common.PageResult;
import cn.rosercode.finance.dto.LogQuery;
import cn.rosercode.finance.entity.HttpLog;
import cn.rosercode.finance.entity.LoginLog;
import cn.rosercode.finance.vo.AppLogVO;
import cn.rosercode.finance.vo.HttpLogVO;
import cn.rosercode.finance.vo.LoginLogVO;
/**
* 日志服务接口,负责访问日志与登录日志的写入、分页查询以及应用运行日志的读取。
*
* @date 2026-09-18 16:53:17
*/
public interface LogService {
/**
* 记录一条 HTTP 访问日志。
*
* @param httpLog 访问日志实体
*/
void recordHttpLog(HttpLog httpLog);
/**
* 记录一条登录日志。
*
* @param loginLog 登录日志实体
*/
void recordLoginLog(LoginLog loginLog);
/**
* 分页查询 HTTP 访问日志。
*
* @param query 查询条件
* @return 分页后的访问日志
*/
PageResult<HttpLogVO> pageHttpLogs(LogQuery query);
/**
* 分页查询登录日志。
*
* @param query 查询条件
* @return 分页后的登录日志
*/
PageResult<LoginLogVO> pageLoginLogs(LogQuery query);
/**
* 读取应用运行日志文件内容。
*
* @param date 日志日期(yyyy-MM-dd),为空表示当前日志文件
* @param level 日志级别过滤,为空表示全部
* @param keyword 关键字过滤,为空表示全部
* @param lines 返回的最大行数
* @param since 起始时间戳(epoch 毫秒),为空表示不限制
* @return 运行日志视图对象
*/
AppLogVO readAppLog(String date, String level, String keyword, int lines, Long since);
}