Skip to content

About

一个用于查看logcat以及内核日志的小工具

Resources

Stars

19 stars

Watchers

0 watching

Forks

Repository files navigation

LogcatView

LogcatView 是一个面向 Android 调试和逆向工作的轻量 Windows / Linux Logcat 工具。Rust 负责 ADB 进程、日志解析和批量事件传输,Tauri + React 负责界面。

界面预览

日志查看与过滤

LogcatView 日志主界面

外观与存储设置

LogcatView 设置界面

等级着色与多行异常

LogcatView 日志等级和异常堆栈

Windows 本地环境

项目不会把 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 的系统编译基础,无法放进项目目录,需要由系统提供。

Linux 本地环境

Ubuntu / Debian 首次构建时先安装 Tauri 使用的 WebKitGTK 等系统库,再准备项目内工具链:

cd /path/to/LogcatView
./setup-linux-deps.sh
./setup-env.sh

Rust、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.ps1

Linux:

./run-dev.sh

连接 Android 设备并确认 USB 调试授权后,应用会自动发现设备、读取进程并开始 Logcat。也可以在设置中选择其他 adb / adb.exe。

功能

  • 设备状态、设备型号和进程/PID 选择,应用进程重启后按进程名自动跟踪新 PID
  • 已选进程可从选择框内一键清除,立即恢复全部进程日志
  • all、main、system、crash、radio、events Logcat 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.sh

AppImage 和 DEB 会复制到 release/linux。AppImage 是 Linux 便携版,DEB 是 Ubuntu / Debian 安装版。

GitHub Actions 发布

推送 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 兼容库。

About

一个用于查看logcat以及内核日志的小工具

Resources

Stars

19 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages