# Log4j结构化查询工具 **Repository Path**: xiyuruntai/log-analyzer ## Basic Information - **Project Name**: Log4j结构化查询工具 - **Description**: 本项目是一个专业的日志分析工具,旨在帮助开发者和系统管理员快速分析、查询和可视化Log4j格式的日志文件。通过将日志文件解析并存储到SQLite数据库中,用户可以方便地进行复杂的查询、过滤和统计分析,快速定位系统问题。 - **Primary Language**: NodeJS - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-22 - **Last Updated**: 2026-05-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Log4j日志分析工具 一个功能完整的Electron桌面应用,专门用于日志文件的分析和处理,具有图形化界面和SQLite数据库存储功能。 ## 项目背景 本项目是一个专业的日志分析工具,旨在帮助开发者和系统管理员快速分析、查询和可视化Log4j格式的日志文件。通过将日志文件解析并存储到SQLite数据库中,用户可以方便地进行复杂的查询、过滤和统计分析,快速定位系统问题。 ## 核心功能 ### 1. 文件管理 - **多种文件选择方式**:支持通过菜单选择、拖拽上传两种方式加载日志文件 - **大文件支持**:采用流式逐行解析,支持 500MB+ 大文件解析,内存占用恒定 - **文件去重**:智能检测已解析文件(基于文件名+大小+修改时间),避免重复解析 - **文件信息显示**:显示文件路径、大小、创建时间和日志条数 ### 2. 日志解析与存储 - **智能解析**:自动识别多种Log4j日志格式,提取时间戳、日志级别、模块、消息等字段 - **流式处理**:逐行读取、批量入库,实时进度显示 - **数据库存储**:每文件独立数据库,完整保存所有解析字段(26个字段) - **缓存机制**:已解析文件直接从数据库加载,秒级响应 ### 3. 数据查询与过滤 - **多条件过滤**:支持按日志级别、模块、时间范围、关键词进行过滤 - **数据库索引**:为常用字段建立索引,查询性能优异 - **实时搜索**:输入关键词即时过滤显示结果 - **分页显示**:支持分页浏览大量日志数据,可调整每页条数 ### 4. 可视化界面 - **WebStorm风格界面**:采用暗色主题,类似WebStorm IDE的现代化界面 - **自定义标题栏**:移除原生菜单栏,实现自定义工具栏 - **响应式布局**:自适应不同屏幕尺寸 - **详情弹窗**:查看完整日志内容,支持JSON格式化显示 ### 5. 高级功能 - **结果导出**:将过滤后的结果导出为JSON文件 - **开发者工具**:内置debug按钮,一键打开开发者工具 - **窗口控制**:最小化、最大化、关闭窗口功能 - **历史记录**:保留解析历史,支持重新加载 ## 技术架构 ### 前端技术栈 - **Electron**:跨平台桌面应用框架 - **HTML/CSS/JavaScript**:前端界面开发 - **Bootstrap 5**:响应式UI框架 - **Bootstrap Icons**:图标库 ### 后端技术栈 - **Node.js**:运行时环境 - **SQLite3**:轻量级数据库,每文件独立存储 - **流式读取**:readline 模块逐行处理大文件 - **文件系统API**:本地文件读写操作 ### 项目结构 ``` log-analyzer/ ├── main.js # Electron主进程,窗口创建、IPC通信、流式解析 ├── preload.js # 预加载脚本,桥接主进程和渲染进程 ├── index.html # 主界面HTML ├── renderer/ │ ├── index.js # 渲染进程主逻辑,UI交互和数据展示 │ ├── style.css # 自定义样式,WebStorm风格界面 │ ├── parser.js # 日志解析器,支持逐行解析 │ └── database.js # 数据库管理,查询、统计、缓存 ├── data/ # SQLite数据库文件存储目录(自动创建) │ └── logs_*.db # 每个解析文件对应一个数据库 ├── assets/ # 静态资源 │ └── css/ # Bootstrap样式文件 └── package.json # 项目配置 ``` ## 安装与使用 ### 环境要求 - Node.js 14.0.0 或更高版本 - npm 6.0.0 或更高版本 ### 安装步骤 1. 克隆项目到本地 2. 安装依赖:`npm install` 3. 启动开发模式:`npm start` 4. 构建发布版本:`npm run dist` ### 使用说明 1. **选择日志文件** - 点击工具栏的"选择文件"按钮 - 或直接将日志文件拖拽到应用窗口 2. **解析日志** - 选择文件后,点击"解析日志"按钮 - 等待解析完成,进度条实时显示解析状态 - 如文件已解析过,将直接从缓存加载 3. **过滤与查询** - 使用过滤面板设置查询条件 - 按日志级别、模块、时间范围过滤 - 使用关键词搜索特定内容 - 点击"重置过滤"恢复初始状态 4. **查看详情** - 点击日志条目的"查看详情"按钮 - 弹窗显示完整日志内容和元信息 - 支持复制消息和原始日志 5. **导出结果** - 过滤后点击"导出结果"按钮 - 选择保存位置导出为JSON文件 ## 数据库设计 ### 元数据表 (metadata) ```sql CREATE TABLE metadata ( key TEXT PRIMARY KEY, value TEXT ); ``` 存储信息: - `original_filename` - 原始文件名 - `original_path` - 原始文件路径 - `file_size` - 文件大小 - `file_modified_time` - 文件修改时间(用于去重) - `parse_time` - 解析时间 - `log_count` - 日志条数 ### 日志数据表 (logs) 完整保存所有解析字段(26个字段),包括: - 基本信息:`original`, `timestamp`, `date`, `time`, `level`, `module`, `message` - 时区信息:`timezone`, `local_date`, `local_time`, `is_time_converted`, `original_timezone` - 行信息:`line_number`, `line_count`, `is_multi_line` - 时间详情:`year`, `month`, `day`, `hour`, `minute`, `second`, `millisecond` - 消息分析:`has_json`, `has_array`, `has_url`, `message_length` ### 索引优化 - `idx_level` - 日志级别索引 - `idx_date` - 日期索引 - `idx_timestamp` - 时间戳索引 - `idx_module` - 模块索引 - `idx_year_month_day` - 复合日期索引 ## 开发指南 ### 项目启动方式 - **开发模式**: `npm start` 或 `electron .` - **构建发布**: `npm run dist` 生成可执行文件 ### 代码结构说明 - **main.js**: Electron主进程,负责窗口创建、IPC通信、流式读取和解析入库 - **preload.js**: 安全桥接层,暴露安全的API给渲染进程 - **renderer/index.js**: 渲染进程主逻辑,处理UI交互、数据库查询和数据展示 - **renderer/parser.js**: 日志解析核心算法,支持多种Log4j格式,逐行解析 - **renderer/database.js**: 数据库管理,表创建、查询、统计、缓存管理 - **renderer/style.css**: 自定义样式,实现WebStorm风格界面 ### 自定义功能扩展 1. **添加新的日志格式支持** - 修改`parser.js`中的正则表达式 - 更新日志字段提取逻辑 2. **添加新的过滤条件** - 在`database.js`的`queryLogs()`方法中添加查询条件 - 在`index.js`中扩展过滤逻辑 - 在HTML中添加对应的UI控件 3. **修改界面主题** - 编辑`style.css`中的颜色变量 - 调整布局和组件样式 ## 项目特点 ### 用户体验优化 - **拖拽支持**:整个页面都是拖拽区域,简化文件选择 - **实时反馈**:操作时有明确的进度提示和状态反馈 - **大文件友好**:流式处理,解析大文件不卡顿 - **智能缓存**:已解析文件秒级加载 - **错误处理**:完善的错误提示和恢复机制 ### 性能优化 - **流式读取**:逐行读取文件,避免内存溢出 - **批量插入**:每1000条批量写入数据库 - **数据库索引**:为常用查询字段建立索引 - **异步处理**:所有文件操作均为异步,避免界面卡顿 - **内存占用恒定**:解析过程中内存占用稳定,不受文件大小影响 ### 安全性 - **上下文隔离**:渲染进程无法直接访问Node.js API - **输入验证**:所有用户输入都经过验证 - **文件权限**:严格限制文件访问范围 ## 故障排除 ### 常见问题 1. **应用无法启动** - 检查Node.js和npm版本 - 运行`npm install`重新安装依赖 - 检查Electron安装是否完整 2. **文件解析失败** - 确认日志文件格式为Log4j标准格式 - 检查文件编码是否为UTF-8 - 查看控制台错误信息 3. **数据库操作失败** - 检查 `data/` 目录权限 - 确认磁盘空间充足 - 重启应用尝试重新连接 4. **大文件解析慢** - 正常现象,500MB文件解析时间取决于硬件性能 - 可查看进度条了解解析进度 - 解析完成后再次加载会从缓存读取 ### 调试技巧 - 点击工具栏的debug按钮打开开发者工具 - 查看控制台输出和网络请求 - 使用Electron的devtools进行性能分析 ## 未来规划 ### 计划功能 - [ ] 提供历史记录管理UI - [ ] 支持数据库清理策略 ## 贡献指南 欢迎提交Issue和Pull Request来改进这个项目。在提交代码前,请确保: 1. 代码符合项目编码规范 2. 添加必要的测试用例 3. 更新相关文档 4. 通过现有功能测试 ## 许可证 本项目采用APACHE2许可证。详见LICENSE文件。 ## 联系方式 如有问题或建议,请通过以下方式联系: - 提交Gitee Issue - 发送邮件至项目维护者 - happyinwinter@163.com - 微信:happyinwinter - QQ:804806066 --- **感谢使用Log4j日志分析工具!希望这个工具能帮助您更高效地分析和处理日志数据。**