LogcatView 是一个面向 Android 调试和逆向工作的轻量 Windows / Linux Logcat 工具。Rust 负责 ADB 进程、日志解析和批量事件传输,Tauri + React 负责界面。
项目不会把 Rust、Node、Cargo 缓存或编译临时文件写入用户目录。首次准备环境:
cd F:\code\rust_code\LogcatView
.\setup-env.ps1它会在 .tools 下安装 Rust stable 和便携 Node.js,在 .build 下保存编译产物。Visual Studio C++ Build Tools 和 Windows WebView2 是 Tauri 的系统编译基础,无法放进项目目录,需要由系统提供。
Ubuntu / Debian 首次构建时先安装 Tauri 使用的 WebKitGTK 等系统库,再准备项目内工具链:
cd /path/to/LogcatView
./setup-linux-deps.sh
./setup-env.shRust、Node.js、npm 缓存和编译产物仍分别保存在项目内的 .tools 和 .build。setup-linux-deps.sh 安装的是 Linux 图形程序必须使用的系统动态库,其他发行版需要用对应包管理器安装 Tauri 2 的 Linux 前置依赖。
运行前确保 adb 位于 PATH、ANDROID_HOME、ANDROID_SDK_ROOT 或 ~/Android/Sdk/platform-tools。真机 USB 调试还可能需要配置发行版的 Android udev 规则;也可以在设置中直接选择 adb 文件。
.\run-dev.ps1Linux:
./run-dev.sh连接 Android 设备并确认 USB 调试授权后,应用会自动发现设备、读取进程并开始 Logcat。也可以在设置中选择其他 adb / adb.exe。
- 设备状态、设备型号和进程/PID 选择,应用进程重启后按进程名自动跟踪新 PID
- 已选进程可从选择框内一键清除,立即恢复全部进程日志
all、main、system、crash、radio、eventsLogcat buffer- 独立 Kernel 标签页,通过
dmesg -r -w实时采集内核日志;支持系统直读或 root,使用独立缓存、序号、JSONL 会话和导出 - 实时批量采集,界面缓存上限可在 10,000 到 1,000,000 条之间自定义(默认 200,000),完整会话持续写入 JSONL 文件
- 设置中可自定义 Logcat 与 Kernel 会话的存放目录,切换目录只影响新会话,旧日志不会被移动
- 会话默认保留 30 天,可在设置中选择 7 天到 1 年的快捷值或自定义 1 - 3650 天;启动和运行期间自动清理过期会话,不删除正在采集及非 LogcatView 文件
- 两阶段启动、序号缺口检测和磁盘补发,暂停或前端事件拥堵时不依赖内存队列保留日志
- 采集状态栏显示落盘、待同步、补发、ADB 诊断、事件发送失败、UTF-8 替换、设备丢弃标记和磁盘错误计数
- Android Studio 风格查询语法、自动补全、查询历史和保存的过滤器
- 查询栏显示当前项与匹配总数,支持按钮或
F3/Shift+F3跳转上下结果,并高亮查询条件在消息和 Tag 中的命中内容;独立 Tag 过滤不着色 - Tag 过滤记录最近 30 个输入值,支持快速复用和单条删除
- Tag 输入框左侧漏斗按钮可随时展开全部历史记录
- 多 Logcat 视图,每个视图保存独立查询、Tag 和最低级别
- 标准、紧凑、完整格式预设,可配置日期、时间、级别、PID、TID、Tag、包名和软换行
- 表格列宽支持拖动调整并持久保存,列分隔线可双击恢复默认宽度
- 可持久化的浅色、深色外观模式
- 日志字体和 10 - 15px 字号可在设置中切换,默认内置 JetBrains Mono,并提供 Cascadia Mono、Consolas 和系统等宽字体
- 崩溃、native tombstone 和 Java/Kotlin 堆栈识别与着色
V/D/I/W/E/F级别徽标、Tag、消息文字及警告/错误行分级配色- 日志等级着色可一键开关,详情面板支持拖拽调整高度
- 打开日志详情时暂时冻结自动滚动,关闭详情后恢复跟随,后台采集始终继续
- 实时采集优先使用
adb exec-out logcat -B的原始二进制通道,保留设备端记录边界、事件日志和多行消息;探测失败时自动回退logcat -v long - 旧版 threadtime 日志中的同源异常堆栈仅在显示层合并,磁盘原始日志保持不变
- 设置中可开启或关闭连续重复日志折叠;相同级别、PID、TID、Tag 和完整消息只显示一行及重复次数,磁盘会话与导出仍保留全部记录
- 自动跟随、暂停显示但保留后台采集、清空设备缓冲区
- 设置中可选择单击或双击打开日志详情(默认双击);可通过
Ctrl+C、详情按钮或右键菜单复制,支持导入/导出可见日志或完整采集会话 - 日志行右键菜单支持复制消息、复制完整日志,以及添加或排除 Tag、PID、进程筛选
- ADB 路径持久化,所有项目工具链、缓存和编译产物均隔离在当前目录
从 ADB Logcat 成功连接开始,应用会先验证最近 128 条二进制记录;验证通过后使用 adb exec-out logcat -B 避免 Windows 文本通道的 CRLF 转换,不支持时才使用 -v long 兼容模式。二进制解析支持 20、24、28 字节 Header 以及 text、events、stats、security buffer,无法识别的厂商 event 会保留为完整十六进制原始内容。两种模式都以一条设备记录为单位处理,日志中的换行和堆栈不会被拆成多条。每条完整记录会先追加到磁盘会话,再进入界面事件队列。界面检测到序号缺口、暂停后继续或事件队列拥堵时,会从磁盘补发;停止和切换设备时会先终止 ADB,再排空已经到达应用管道的数据。
Kernel 与普通 Logcat 使用两条并行采集链。Kernel 优先尝试系统权限直接读取 dmesg,失败后尝试 root;两者都不可用时只停止 Kernel 会话,不影响普通 Logcat。Kernel 的 ANSI 控制码会在解析时移除,syslog 优先级映射到现有日志级别颜色,开机时间显示为 +秒数。两个标签页分别写入带 all 和 kernel 后缀的 JSONL 文件,切换标签不会停止后台采集。
这不能消除 Android 设备 logd 缓冲区在连接前或读取不及时造成的覆盖,也不能抵抗磁盘耗尽、介质故障或系统强制结束进程。ADB 诊断、设备丢弃标记、磁盘错误和解码替换都会在状态栏显示,不会静默忽略。
开发环境的默认会话目录是 .sessions,配置位于 .config;.sessions 已加入 .gitignore,不会被 Git 提交。可以在设置中把会话目录改到项目外部,配置后的目录优先于开发环境默认值。
Windows 安装版默认把会话放在 %LOCALAPPDATA%\LogcatView\sessions,配置放在 %APPDATA%\LogcatView。Linux 默认会话目录为 $XDG_STATE_HOME/LogcatView/sessions(未设置时为 ~/.local/state/LogcatView/sessions),配置文件为 $XDG_CONFIG_HOME/LogcatView/config.json(未设置时为 ~/.config/LogcatView/config.json)。
src-tauri/src/adb.rs:ADB 发现、设备和进程命令src-tauri/src/logcat/:解析、磁盘会话、采集和补发src/hooks/useReliableCapture.ts:前端采集生命周期和序号同步src/components/:标题栏、命令栏、过滤栏、虚拟日志表格和状态栏src/logQuery.ts:Android Studio 风格查询解析与匹配
查询条件之间是 AND;使用 | 表示 OR;条件前加 - 表示排除。字段值可以用引号包住空格。
tag:Zygote
package:mine level:warn
process:com.example message:"FATAL EXCEPTION"
message~:"timeout|refused" -tag:Noise
pid:1234 tid:5678
age:30s
is:crash | is:stacktrace
支持字段:tag、package、process、message、pid、tid、level、age 和 is。字段名后加 ~ 使用正则,例如 message~:\\d+ms。
Ctrl+F:聚焦查询栏Ctrl+L:清空设备与界面日志Ctrl+S:导出当前可见日志Ctrl+C:复制选中的日志Space:暂停或继续显示F5:刷新设备Esc:关闭菜单、对话框或详情
Windows:
. .\env.ps1
npm run build
cargo test --manifest-path src-tauri\Cargo.toml
cargo test --manifest-path src-tauri\Cargo.toml parses_one_million_lines -- --ignored
.\build.ps1安装包会在 .build\target\release\bundle\nsis 下生成。
Linux:
source ./env.sh
npm test
npm run build
cargo test --manifest-path src-tauri/Cargo.toml
./build.shAppImage 和 DEB 会复制到 release/linux。AppImage 是 Linux 便携版,DEB 是 Ubuntu / Debian 安装版。
推送 v* 标签会同时构建 Windows 和 Linux x64 包,并创建 GitHub Release。也可以在 Actions 页面手动运行工作流进行构建验证;手动运行只上传临时构建产物,不创建 Release。
| 平台 | 便携版 | 安装版 |
|---|---|---|
| Windows x64 | LogcatView_<version>_windows_x64_portable.exe |
LogcatView_<version>_windows_x64_setup.exe |
| Linux x64 | LogcatView_<version>_linux_x86_64.AppImage |
LogcatView_<version>_linux_amd64.deb |
Release 还会附带 SHA256SUMS.txt,可用于校验下载文件是否完整。Windows 便携版仍依赖系统 WebView2;Linux AppImage 在部分发行版上需要系统提供 FUSE 2 兼容库。


