# moon-cloud-log **Repository Path**: SailorMoonKe/moon-cloud-log ## Basic Information - **Project Name**: moon-cloud-log - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-29 - **Last Updated**: 2025-06-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Moon Cloud Log 一个基于 Spring Boot 的统一日志记录组件,用于自动记录 HTTP 请求的详细信息。 ## 功能特性 - ✅ 自动记录 HTTP 请求和响应信息 - ✅ 支持自定义控制器和方法注解 - ✅ 支持异常信息记录 - ✅ 支持请求头信息记录(可选) - ✅ 特殊处理 `/error` 路径的错误请求 - ✅ 支持真实IP地址获取 - ✅ 自动记录请求执行状态(success/error) - ✅ 基于 AOP 切面,性能影响最小 - ✅ 支持 MyBatis Plus,数据持久化到数据库 ## 快速开始 ### 1. 添加依赖 ```xml com.moon.cloud.log moon-cloud-log 1.0.0-SNAPSHOT ``` ### 2. 配置数据库 ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/your_database username: your_username password: your_password driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: configuration: map-underscore-to-camel-case: true global-config: db-config: id-type: assign_id ``` ### 3. 创建数据库表 执行 `src/main/resources/sql/request_log.sql` 中的 SQL 脚本。 ### 4. 配置日志组件 ```yaml moon: cloud: log: enabled: true # 是否启用日志记录 include-result: true # 是否记录返回结果 include-exception: true # 是否记录异常信息 include-headers: false # 是否记录请求头信息 ``` ### 5. 使用注解 ```java @RestController @LogController("用户管理") public class UserController { @GetMapping("/users") @LogMethod("查询用户列表") public List getUsers() { return userService.findAll(); } @PostMapping("/users") @LogMethod("创建用户") public User createUser(@RequestBody User user) { return userService.create(user); } } ``` ## 配置提示问题解决 如果在 `application.yml` 中输入 `moon` 时没有自动提示,请按以下步骤解决: 1. **重新构建项目**: ```bash mvn clean compile install ``` 2. **刷新 IDE 缓存**: - IntelliJ IDEA: File → Invalidate Caches and Restart - Eclipse: Project → Clean 3. **检查依赖**:确保项目中包含了 `spring-boot-configuration-processor` 依赖 详细解决方案请参考 [CONFIGURATION_GUIDE.md](CONFIGURATION_GUIDE.md) ## 特殊功能 ### /error 路径处理 当请求路径为 `/error` 时(通常是 Spring Boot 的错误页面),系统会跳过日志记录,不会在数据库中插入任何记录。这样可以避免错误页面的重复记录,减少数据库存储压力。 ### 请求状态记录 系统会自动记录每个请求的执行状态: - **success**: 请求执行成功,没有抛出异常 - **error**: 请求执行失败,抛出了异常 ### 真实IP获取 系统会自动获取客户端的真实IP地址,支持以下场景: - 直接访问:使用 `request.getRemoteAddr()` - 代理访问:优先使用 `X-Forwarded-For` 头 - 真实IP:使用 `X-Real-IP` 头 ### 请求头记录 通过设置 `include-headers: true` 可以记录所有请求头信息,但请注意: - 默认关闭,避免记录敏感信息 - 生产环境建议保持关闭状态 ## 数据库表结构 ```sql CREATE TABLE `request_log` ( `request_id` bigint NOT NULL COMMENT '请求ID', `server_name` varchar(100) DEFAULT NULL COMMENT '服务名称', `request_url` varchar(500) DEFAULT NULL COMMENT '请求路径', `request_time` datetime DEFAULT NULL COMMENT '请求时间', `request_controller` varchar(100) DEFAULT NULL COMMENT '控制器业务类型', `request_method` varchar(10) DEFAULT NULL COMMENT 'HTTP方法', `request_operate` varchar(50) DEFAULT NULL COMMENT '操作类型', `request_end_time` datetime DEFAULT NULL COMMENT '请求结束时间', `request_param` text COMMENT '请求参数', `request_result` text COMMENT '返回结果', `request_exception` text COMMENT '异常信息', `request_ip` varchar(50) DEFAULT NULL COMMENT '请求IP', `request_headers` text COMMENT '请求头内容', `request_status` varchar(20) DEFAULT NULL COMMENT '请求状态:success/error', PRIMARY KEY (`request_id`) ); ``` ## 注解说明 ### @LogController 用于标记控制器类,指定业务类型: ```java @LogController("用户管理") public class UserController { // 控制器方法 } ``` ### @LogMethod 用于标记方法,指定操作类型: ```java @LogMethod("创建用户") public User createUser(@RequestBody User user) { // 方法实现 } ``` ## 配置属性 | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `enabled` | boolean | true | 是否启用日志记录 | | `include-result` | boolean | true | 是否记录返回结果 | | `include-exception` | boolean | true | 是否记录异常信息 | | `include-headers` | boolean | false | 是否记录请求头信息 | ## 注意事项 1. 确保项目中包含必要的依赖: - Spring Boot Starter Web - Spring Boot Starter AOP - MyBatis Plus - MySQL 驱动 2. 请求头信息记录功能默认关闭,如需启用请设置 `include-headers: true` 3. 文件上传参数会自动标记为"文件",不会记录具体内容 4. 异常信息会记录异常消息,不会记录完整的堆栈信息 5. 在生产环境中,建议关闭 `include-headers` 以减少存储开销 ## 版本历史 ### v1.0.0-SNAPSHOT - 初始版本 - 支持基本的请求日志记录 - 支持自定义注解 - 支持异常处理 - 新增请求IP和请求头记录功能 - 新增 `/error` 路径特殊处理(跳过日志记录) - 新增请求状态记录功能(success/error) - 新增常量类,提高代码规范性 ## 许可证 MIT License