一个基于Spring Boot的Web应用,用于读取和查看Linux系统中的日志文件,支持项目管理、分页浏览、关键词搜索和文件下载功能。
- ✅ 项目管理:创建、编辑、删除项目,每个项目关联一个日志文件路径
- ✅ 智能加载:打开日志时自动显示文件最后500条记录(最新内容)
- ✅ Tail模式:刷新时始终读取最新内容,类似
tail命令 - ✅ 分页浏览:支持大文件分页加载,可自定义每页显示行数
- ✅ 关键词搜索:支持普通搜索和正则表达式搜索,可选区分大小写
- ✅ 文件下载:支持下载完整的日志文件
- ✅ 手动刷新:一键刷新日志内容,自动显示最新记录
- ✅ 现代化UI:响应式设计,美观易用的用户界面
- ✅ H2数据库:轻量级嵌入式数据库,无需额外配置
- 后端:Spring Boot 2.7.14、Spring Data JPA、H2 Database
- 前端:原生HTML、CSS、JavaScript(无框架依赖)
- 构建工具:Maven
- JDK版本:Java 11+
log-viewer/
├── src/
│ ├── main/
│ │ ├── java/com/logviewer/
│ │ │ ├── LogViewerApplication.java # 主启动类
│ │ │ ├── controller/ # 控制器层
│ │ │ │ ├── ProjectController.java # 项目管理接口
│ │ │ │ └── LogController.java # 日志读取接口
│ │ │ ├── service/ # 服务层
│ │ │ │ ├── ProjectService.java # 项目管理服务
│ │ │ │ └── LogReaderService.java # 日志读取服务
│ │ │ ├── entity/ # 实体类
│ │ │ │ └── Project.java # 项目实体
│ │ │ ├── repository/ # 数据访问层
│ │ │ │ └── ProjectRepository.java # 项目仓库
│ │ │ └── dto/ # 数据传输对象
│ │ │ ├── ProjectDTO.java # 项目DTO
│ │ │ ├── LogResponseDTO.java # 日志响应DTO
│ │ │ └── ApiResponse.java # 统一响应DTO
│ │ └── resources/
│ │ ├── application.properties # 应用配置
│ │ └── static/ # 静态资源
│ │ ├── index.html # 主页面
│ │ ├── css/style.css # 样式文件
│ │ └── js/app.js # 前端逻辑
│ └── test/
├── pom.xml # Maven配置
├── .gitignore # Git忽略配置
└── README.md # 项目说明
- JDK 11 或更高版本
- Maven 3.6 或更高版本
- 克隆或下载项目
cd log-viewer- 编译打包
mvn clean package- 运行应用
java -jar target/log-viewer-1.0.0.jar或者使用Maven直接运行:
mvn spring-boot:run- 访问应用
打开浏览器访问:http://localhost:8080
- 访问H2控制台(可选)
访问:http://localhost:8080/h2-console
- JDBC URL:
jdbc:h2:file:./data/logviewer - 用户名:
sa - 密码: (留空)
- 点击左侧边栏顶部的 + 按钮
- 填写项目信息:
- 项目名称:自定义项目名称(必填)
- 日志文件路径:Linux系统中的日志文件完整路径(必填)
- 描述:项目描述(可选)
- 点击"保存"按钮
- 在左侧项目列表中点击项目
- 自动显示最后500行:日志会自动加载最新的500条记录
- 行号显示文件的实际行号(从末尾倒推)
- 如需查看更早的日志,可以使用底部分页控件
💡 提示:打开项目时默认进入 Tail模式,始终显示最新内容,最适合实时监控场景。
- 选择一个项目后,在搜索栏输入关键词
- 可选功能:
- 区分大小写:精确匹配大小写
- 正则表达式:使用正则表达式搜索
- 点击"搜索"按钮
- 搜索结果会显示行号和匹配的内容
手动刷新:
- 选择一个项目
- 点击右上角的"刷新"按钮
- 自动读取最新500行,始终显示文件末尾的最新内容
💡 提示:
- 刷新时始终读取文件的最新内容(Tail模式)
- 适合查看最新日志和错误信息
- 选择一个项目
- 点击右上角的"下载"按钮
- 浏览器会自动下载日志文件
- 点击项目右侧的 编辑 图标修改项目信息
- 点击 删除 图标删除项目(会弹出确认提示)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/projects |
获取所有项目 |
| GET | /api/projects/{id} |
获取单个项目 |
| POST | /api/projects |
创建项目 |
| PUT | /api/projects/{id} |
更新项目 |
| DELETE | /api/projects/{id} |
删除项目 |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/logs/{projectId} |
读取日志(分页) |
| GET | /api/logs/{projectId}/tail |
读取最后N行(实时监控) |
| GET | /api/logs/{projectId}/search |
搜索日志 |
| GET | /api/logs/{projectId}/download |
下载日志文件 |
| POST | /api/logs/cache/clear |
清除缓存 |
读取日志(分页)
GET /api/logs/1?page=1&size=100
读取最后N行(Tail模式)
GET /api/logs/1/tail?lines=500
搜索日志
GET /api/logs/1/search?keyword=ERROR&caseSensitive=false®ex=false
主要配置项在 src/main/resources/application.properties 文件中:
# 服务器端口(默认8080)
server.port=8080
# H2数据库文件路径
spring.datasource.url=jdbc:h2:file:./data/logviewer
# 文件上传限制
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=100MB- 文件权限:确保Java应用有权限读取指定的日志文件
- 文件路径:日志文件路径必须是绝对路径(如:
/var/log/application.log) - 大文件处理:系统支持大文件分页读取,但首次加载会统计总行数,可能需要一些时间
- 缓存机制:文件总行数会被缓存,如果文件被修改,可以使用"刷新"按钮重新加载
- 搜索限制:搜索结果最多返回1000行,避免内存溢出
- 后端:在
controller、service层添加相应的方法 - 前端:在
app.js中添加对应的JavaScript函数 - 样式:在
style.css中添加样式
修改 application.properties 中的日志级别:
logging.level.com.logviewer=DEBUG运行单元测试:
mvn testQ: 无法读取日志文件?
A: 检查文件路径是否正确,以及Java应用是否有读取权限。在Linux系统中可能需要调整文件权限:chmod 644 /path/to/logfile.log
Q: 大文件加载很慢?
A: 首次加载大文件时需要统计总行数,会比较耗时。后续访问会使用缓存,速度会快很多。
Q: 如何修改数据库位置?
A: 修改 application.properties 中的 spring.datasource.url 配置项。
Q: 如何部署到生产环境?
A:
- 使用
mvn clean package打包 - 将生成的JAR文件部署到服务器
- 配置systemd或使用nohup运行
- 建议配置Nginx反向代理
本项目采用 MIT 许可证。
欢迎提交Issue和Pull Request!
如有问题或建议,请创建Issue。
祝使用愉快! 🎉