feat: 支持多系统独立认证与日志下载
- 删除 BaseConfig,认证信息并入 LogFileConfig.SystemItem
- 每个系统独立配置用户名/密码/RSA公钥/网关地址/登录路径
- 支持 subPath 自定义每个系统的存储子目录
- 文件路径隔离:{path}/{subPath}/{serviceName}
- 单个系统登录/下载失败不影响其他系统
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## 项目概述
|
||||
|
||||
基于 **Solon 3.9.0** 框架的日志文件定时下载工具。通过远程网关 API 认证后,拉取多个微服务实例的日志文件(`.log` 和 `.gz`)到本地磁盘,并管理本地日志文件的清理与归档。
|
||||
|
||||
- Java 17,Maven 构建
|
||||
- 启动类:`com.renkang.rkutils.App`
|
||||
- 配置文件:`src/main/resources/app.yml`(外挂 `conf/app-xj.yml`)
|
||||
|
||||
## 构建与运行
|
||||
|
||||
```bash
|
||||
# 编译打包
|
||||
mvn clean package -DskipTests
|
||||
|
||||
# 直接运行(Solon Maven Plugin)
|
||||
mvn solon:run
|
||||
```
|
||||
|
||||
当前无测试用例。
|
||||
|
||||
## 架构概览
|
||||
|
||||
```
|
||||
App.java (入口, @SolonMain + @EnableScheduling)
|
||||
├── DownFileJob — 定时任务, cron: 0 30 * * * ? (每小时第30分钟)
|
||||
└── LogFileService — 接口, 定义 downloadLogFile()
|
||||
└── LogFileServiceImpl — 核心下载逻辑
|
||||
├── BaseConfig — ${base}: username/password/publicKey/gatewayUrl
|
||||
└── LogFileConfig — ${file}: path/services (name + insCount)
|
||||
```
|
||||
|
||||
### 核心流程 (LogFileServiceImpl.downloadLogFile)
|
||||
|
||||
1. **登录认证**:RSA 公钥加密密码 → POST `/sys/mLogin` → 获取 JWT token
|
||||
2. **获取文件列表**:token 鉴权 → GET `/{serviceName}/service/log/files` → JSON 中取 `result.records`
|
||||
3. **本地清理**:删除今日之前的 `.log` 文件;将不属于当前实例前缀的历史文件移入 `tmp/` 目录
|
||||
4. **下载文件**:
|
||||
- `.gz` 压缩文件(已归档)→ 下载到 `{path}/{serviceName}/archive/`,已存在则跳过
|
||||
- `.log` 文件 → 下载到 `{path}/{serviceName}/`,与本地同名文件比大小:远程更大则覆盖,更小则新建序号文件(`.log.001` 类推)
|
||||
|
||||
### 配置结构
|
||||
|
||||
```yaml
|
||||
solon.config.load: # 外挂配置文件
|
||||
solon.logging.appender: # 控制台 + 文件日志
|
||||
solon.scheduling.job: # downFileJob 定时任务配置
|
||||
base: # 网关认证信息(BaseConfig)
|
||||
username / password / publicKey / gatewayUrl
|
||||
file: # 日志下载配置(LogFileConfig)
|
||||
path: D:/xjlogs
|
||||
services:
|
||||
- name: jeecg-system
|
||||
insCount: 2
|
||||
```
|
||||
|
||||
### 关键依赖
|
||||
|
||||
| 依赖 | 用途 |
|
||||
|------|------|
|
||||
| solon-lib | Solon 核心 |
|
||||
| solon-scheduling-simple | `@Scheduled` 定时任务支持 |
|
||||
| solon-logging-logback-jakarta | 日志框架(Logback) |
|
||||
| solon-net-httputils | HTTP 客户端(`HttpUtils.http()`) |
|
||||
| fastjson2 | JSON 解析 |
|
||||
| lombok | 注解简化(`@Data`, `@Slf4j`) |
|
||||
| solon-maven-plugin | Maven 打包/运行插件 |
|
||||
|
||||
### 注意事项
|
||||
|
||||
- `BaseConfig` 中的密码通过 RSA 公钥加密后传输,`RSAUtil`(`util` 包)只提供公钥加密
|
||||
- `LogFileServiceImpl.countUniquePrefixes()` 统计文件名最后一个 `_` 前的部分作为实例前缀,用于判断是否有实例变更
|
||||
- 日志文件路径使用硬编码 `/` 分隔符,在 Windows 本地运行时 Java 会正确处理
|
||||
- `solon.config.load` 指向 `conf/app-xj.yml` 作为外挂配置覆盖,该文件不在仓库内
|
||||
Reference in New Issue
Block a user