# log-search-system **Repository Path**: bug_search/log-search-system ## Basic Information - **Project Name**: log-search-system - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-20 - **Last Updated**: 2026-04-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 服务器日志搜索和报告生成系统 一个基于 Spring Boot 的服务器日志搜索和报告生成系统,支持通过 SSH 连接多个 Linux 服务器,使用关键字搜索日志文件并生成 Word 报告。 ## 功能特性 - **多服务器管理**:支持添加、编辑、删除多个 Linux 服务器配置 - **关键字管理**:管理搜索关键字,支持分类管理 - **日志搜索**:通过 SSH 在远程服务器上执行 grep 搜索 - **Word 报告生成**:自动生成格式化的搜索结果 Word 报告 - **Web API**:提供完整的 RESTful API 接口 - **命令行支持**:支持通过命令行参数触发搜索任务 ## 技术栈 - Spring Boot 3.2.0 - MySQL 8.x - MyBatis Plus 3.5.5 - JSch 0.2.17 (SSH 连接) - Apache POI 5.2.5 (Word 生成) - Lombok ## 项目结构 ``` springboot-log-search/ ├── pom.xml ├── src/ │ └── main/ │ ├── java/com/logsearch/ │ │ ├── LogSearchApplication.java # 主启动类 │ │ ├── config/ # 配置类 │ │ │ ├── MyBatisPlusConfig.java │ │ │ ├── ReportProperties.java │ │ │ ├── SshProperties.java │ │ │ └── WebMvcConfig.java │ │ ├── controller/ # 控制器层 │ │ │ ├── GlobalExceptionHandler.java │ │ │ ├── KeywordController.java │ │ │ ├── SearchController.java │ │ │ └── ServerController.java │ │ ├── entity/ # 实体类 │ │ │ ├── ApiResponse.java │ │ │ ├── Keyword.java │ │ │ ├── SearchHistory.java │ │ │ ├── SearchResultDetail.java │ │ │ ├── SearchResultVO.java │ │ │ └── ServerInfo.java │ │ ├── mapper/ # Mapper 接口 │ │ │ ├── KeywordMapper.java │ │ │ ├── SearchHistoryMapper.java │ │ │ ├── SearchResultDetailMapper.java │ │ │ └── ServerInfoMapper.java │ │ ├── runner/ # 命令行Runner │ │ │ └── CommandLineSearchRunner.java │ │ ├── service/ # 服务层 │ │ │ ├── KeywordService.java │ │ │ ├── SearchService.java │ │ │ ├── ServerService.java │ │ │ └── impl/ │ │ │ ├── KeywordServiceImpl.java │ │ │ ├── SearchServiceImpl.java │ │ │ └── ServerServiceImpl.java │ │ └── util/ # 工具类 │ │ ├── PasswordEncoder.java │ │ ├── SearchResultParser.java │ │ ├── SshConnectionPool.java │ │ └── WordReportGenerator.java │ └── resources/ │ ├── application.yml # 应用配置 │ ├── mapper/ # Mapper XML │ │ ├── KeywordMapper.xml │ │ ├── SearchHistoryMapper.xml │ │ ├── SearchResultDetailMapper.xml │ │ └── ServerInfoMapper.xml │ └── sql/ │ └── init.sql # 数据库初始化脚本 └── README.md ``` ## 快速开始 ### 1. 环境要求 - JDK 17+ - Maven 3.8+ - MySQL 8.x ### 2. 数据库配置 ```bash # 登录 MySQL mysql -u root -p # 执行初始化脚本 source src/main/resources/sql/init.sql ``` 或手动执行 SQL 文件中的内容。 ### 3. 修改配置文件 编辑 `src/main/resources/application.yml`,修改数据库连接信息: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/log_search_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: your_username password: your_password ``` ### 4. 编译打包 ```bash cd springboot-log-search mvn clean package -DskipTests ``` ### 5. 运行应用 ```bash # 以 Web 模式启动 java -jar target/log-search-system-1.0.0.jar # 以命令行模式执行搜索 java -jar target/log-search-system-1.0.0.jar --keyword=1 --server=1 ``` ## API 文档 ### 服务器管理 | 方法 | 路径 | 描述 | |------|------|------| | GET | `/api/servers` | 获取所有服务器列表 | | GET | `/api/servers/{id}` | 获取指定服务器 | | POST | `/api/servers` | 添加服务器 | | PUT | `/api/servers/{id}` | 更新服务器 | | DELETE | `/api/servers/{id}` | 删除服务器 | | POST | `/api/servers/{id}/test` | 测试服务器连接 | ### 关键字管理 | 方法 | 路径 | 描述 | |------|------|------| | GET | `/api/keywords` | 获取所有关键字 | | GET | `/api/keywords/{id}` | 获取指定关键字 | | GET | `/api/keywords/category/{category}` | 按分类获取关键字 | | POST | `/api/keywords` | 添加关键字 | | PUT | `/api/keywords/{id}` | 更新关键字 | | DELETE | `/api/keywords/{id}` | 删除关键字 | ### 搜索功能 | 方法 | 路径 | 描述 | |------|------|------| | POST | `/api/search/execute` | 执行搜索任务 | | GET | `/api/search/result/{historyId}` | 获取搜索结果 | | GET | `/api/search/history` | 获取搜索历史 | | GET | `/api/search/report/download/{historyId}` | 下载 Word 报告 | | POST | `/api/search/report/generate/{historyId}` | 生成报告 | ### API 使用示例 ```bash # 添加服务器 curl -X POST http://localhost:8080/api/servers \ -H "Content-Type: application/json" \ -d '{ "name": "测试服务器", "host": "192.168.1.100", "port": 22, "username": "admin", "password": "password123", "description": "测试用服务器", "logPath": "/var/log" }' # 添加关键字 curl -X POST http://localhost:8080/api/keywords \ -H "Content-Type: application/json" \ -d '{ "keyword": "ERROR", "category": "日志级别", "description": "错误日志" }' # 执行搜索 curl -X POST "http://localhost:8080/api/search/execute?keywordId=1&serverId=1" # 下载报告 curl -O http://localhost:8080/api/search/report/download/1 ``` ## 命令行参数 ```bash # 完整参数 java -jar app.jar --keyword=1 --server=1 --path=/var/log --pattern=*.log # 简写形式 java -jar app.jar -k=1 -s=1 -p=/var/log ``` | 参数 | 简写 | 必需 | 描述 | |------|------|------|------| | --keyword | -k | 是 | 关键字ID | | --server | -s | 是 | 服务器ID | | --path | -p | 否 | 搜索路径 | | --pattern | 无 | 否 | 文件匹配模式 | ## 数据库表结构 ### server_info - 服务器信息表 | 字段 | 类型 | 描述 | |------|------|------| | id | BIGINT | 主键 | | name | VARCHAR(100) | 服务器名称 | | host | VARCHAR(255) | 服务器地址 | | port | INT | SSH端口 | | username | VARCHAR(100) | SSH用户名 | | password | VARCHAR(255) | SSH密码 | | description | VARCHAR(500) | 描述 | | log_path | VARCHAR(500) | 默认日志路径 | | status | TINYINT | 状态 | | created_at | DATETIME | 创建时间 | | updated_at | DATETIME | 更新时间 | ### keyword - 关键字表 | 字段 | 类型 | 描述 | |------|------|------| | id | BIGINT | 主键 | | keyword | VARCHAR(255) | 关键字 | | category | VARCHAR(100) | 分类 | | description | VARCHAR(500) | 描述 | | created_at | DATETIME | 创建时间 | ### search_history - 搜索历史表 | 字段 | 类型 | 描述 | |------|------|------| | id | BIGINT | 主键 | | keyword_id | BIGINT | 关键字ID | | server_id | BIGINT | 服务器ID | | search_path | VARCHAR(500) | 搜索路径 | | search_pattern | VARCHAR(255) | 文件模式 | | search_time | DATETIME | 搜索时间 | | result_count | INT | 结果数量 | | report_path | VARCHAR(500) | 报告路径 | | status | TINYINT | 状态 | ### search_result_detail - 搜索结果明细表 | 字段 | 类型 | 描述 | |------|------|------| | id | BIGINT | 主键 | | history_id | BIGINT | 历史ID | | file_path | VARCHAR(500) | 文件路径 | | line_number | INT | 行号 | | match_content | TEXT | 匹配内容 | ## 配置说明 ### SSH 连接配置 ```yaml ssh: pool: max-connections: 10 # 最大连接数 connection-timeout: 30000 # 连接超时(ms) default-log-path: /var/log # 默认日志路径 default-file-pattern: "*.log" # 默认文件匹配模式 ``` ### 报告配置 ```yaml report: output-path: ./reports # 报告输出目录 date-format: yyyyMMddHHmmss # 日期格式 ``` ## 安全建议 1. **密码加密**:生产环境中建议使用更安全的加密方式(如 AES) 2. **SSH 密钥**:优先使用 SSH 密钥认证而非密码 3. **网络安全**:限制数据库和 SSH 端口的访问 4. **日志脱敏**:报告中可能包含敏感信息,注意保护 ## 常见问题 ### Q: SSH 连接失败? A: 检查服务器地址、端口、用户名密码是否正确;确认 SSH 服务是否运行;检查防火墙设置。 ### Q: 搜索不到结果? A: 确认搜索路径是否存在;检查日志文件权限;确认关键字是否正确。 ### Q: 报告生成失败? A: 检查报告目录是否有写入权限;确认 Apache POI 依赖是否正确加载。 ## License MIT License