# LogViewer **Repository Path**: JackZone/log-viewer ## Basic Information - **Project Name**: LogViewer - **Description**: 一款基于 Qt 5 的桌面日志查看器,支持 `本地文件监控` 和 `SSH 远程日志` 两种源,具备 Logback 风格的自定义解析引擎,提供树形结构化展示、实时搜索过滤、增量刷新等能力。 - **Primary Language**: Unknown - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-15 - **Last Updated**: 2026-07-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Log Viewer — 日志监控与分析工具 一款基于 **Qt 5** 的桌面日志查看器,支持 **本地文件监控** 和 **SSH 远程日志** 两种源,具备 Logback 风格的自定义解析引擎,提供树形结构化展示、实时搜索过滤、增量刷新等能力。 ![Qt 5.14.2](https://img.shields.io/badge/Qt-5.14.2-41cd52?logo=qt) ![C++11](https://img.shields.io/badge/C%2B%2B-11-00599C?logo=c%2B%2B) ![License](https://img.shields.io/badge/License-LGPL%20v3-blue) ![Platform](https://img.shields.io/badge/Platform-Windows-lightgrey) --- ## 功能特性 | 特性 | 说明 | |------|------| | **双源支持** | 本地文件 (实时监控 + 增量读取) / SSH 远程文件 (libssh2 轮询) | | **自定义解析** | Logback 风格的模式字符串,支持 `%d` `%level` `%thread` `%logger` `%msg` 等全部常用 token | | **树形结构化展示** | 多级分组、排序、自定义委托渲染(带颜色级别标签) | | **搜索过滤** | 实时跨列模糊搜索,大小写不敏感 | | **双视图切换** | 结构化树形视图 + 原始文本视图(带语法高亮) | | **配置管理** | JSON 持久化,多配置保存,快速切换 | | **远程 SSH** | 支持密码 / 密钥认证,通过内置轻量 libssh2 封装 | ## 快速开始 ### 依赖 - **Qt 5.14+**(Widgets 模块) - **CMake 3.11+** - **MinGW**(推荐 Qt 配套的 MinGW 7.3+) - **libssh2**(可选,启用 SSH 远程功能;否则仅本地模式可用) ### Windows 一键编译 ```powershell # 使用 Qt 5.14.2 + 配套 MinGW .\build.ps1 -QtDir "D:\Qt\Qt5.14.2" -MingwDir "D:\Qt\Qt5.14.2\Tools\mingw730_64" ``` 编译产物:`build\log_viewer.exe` ### 手动编译 ```powershell cd log_viewer mkdir build && cd build cmake -G "MinGW Makefiles" ` -DCMAKE_C_COMPILER="/bin/gcc.exe" ` -DCMAKE_CXX_COMPILER="/bin/g++.exe" ` -DCMAKE_PREFIX_PATH="/5.14.2/mingw73_64" ` -DCMAKE_MAKE_PROGRAM="/bin/mingw32-make.exe" ` .. mingw32-make -j$(nproc) ``` ## 使用指南 ### 1. 配置管理 启动后首先进入配置选择对话框: - **📁 本地** — 配置本地日志文件路径 - **🔗 SSH** — 配置远程主机、端口、认证方式、远程日志路径 - 支持多配置保存,可随时切换 ### 2. 自定义解析模式 在右侧输入框中填写 Logback 风格的模式字符串并点击"应用": ``` %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n ``` **支持的全部 token:** | Token | 说明 | 示例 | |-------|------|------| | `%d{pattern}` | 时间戳 | `%d{yyyy-MM-dd HH:mm:ss.SSS}` | | `%level` / `%p` | 日志级别 | `%5p`(右对齐宽度5) | | `%thread` / `%t` | 线程名 | `[%thread]` | | `%logger` / `%c` | 日志器名称 | `%logger{36}` | | `%msg` / `%m` | 日志消息 | `%msg` | | `%X{key}` | MDC 值 | `%X{userId}` | | `%file` / `%F` | 文件 | `%file` | | `%line` / `%L` | 行号 | `L%line` | | `%n` | 换行 | `%n` | ### 3. 实时监控 - 本地源:基于 `QFileSystemWatcher` 实时跟踪文件变化 - SSH 源:基于可配置的 `QTimer` 轮询 `tail -c +N` - 勾选"自动滚动"跟踪最新日志 ## 项目架构 ``` log_viewer/ ├── CMakeLists.txt # CMake 构建 ├── build.ps1 # Windows 一键编译脚本 ├── LICENSE # LGPL v3 ├── main.cpp # 入口 (配置对话框 → 主窗口) ├── core/ # 逻辑层 │ ├── logentry.h # 数据结构: LogEntry, LogGroup │ ├── logconfig.h # 配置结构: LogConfig │ ├── logsource.h # 抽象基类: LogSource │ ├── locallogsource.* # 本地文件监控 │ ├── sshlogsource.* # SSH 远程日志 │ ├── logparser.* # Logback 模式解析器 + 正则编译 │ └── logmodel.* # QAbstractItemModel 树模型 ├── ui/ # UI 层 │ ├── appconstants.h # 常量: 颜色、样式表、版本号 │ ├── mainwindow.* # 主窗口 │ ├── sourcewidget.* # 左侧面板: 源配置 + 连接 │ ├── logviewwidget.* # 右侧面板: 解析视图 + 原始视图 │ ├── logdelegate.* # 自定义委托 (颜色级别标签) │ ├── rawlogview.* # 原始文本视图 + 语法高亮 │ ├── configmanager.* # 单例: JSON 配置持久化 │ ├── configdialog.* # 配置选择对话框 │ ├── localconfigdialog.* # 新建/编辑本地配置 │ └── sshconfigdialog.* # 新建/编辑 SSH 配置 └── qssh/ # 内置 SSH 兼容层 (libssh2) └── sshconnection.* ``` ### 数据流 ``` 启动 → 配置选择 → MainWindow ├── SourceWidget (连接源) │ ├── LocalLogSource (QFileSystemWatcher) │ └── SshLogSource (libssh2 轮询) └── LogViewWidget (解析 & 展示) ├── LogParser → QList ├── LogModel → 树形结构 └── QTreeView + LogDelegate ``` ## 许可证 本项目基于 **GNU Lesser General Public License v3 (LGPL v3)** 发布。 ``` Copyright (C) 2026 This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. ``` 本程序使用了 **Qt 5.14.2**(LGPL v3),详见 https://www.qt.io。