adb logcat
是 Android 提供的日志输出工具,支持很多命令行参数(如 -v
, -s
, -b
等)来控制输出格式、过滤规则和日志缓冲区。
下面是你问到的这些参数的含义和用法详解:
✅ -v
:输出格式(verbose)
控制每一行日志的格式样式。
常见选项包括:
命令 | 含义 |
---|---|
-v brief |
简洁格式(默认) |
-v process |
显示进程号和标签 |
-v tag |
显示标签和优先级 |
-v raw |
原始格式,不带时间等信息 |
-v time |
显示时间戳(常用) |
-v threadtime |
显示时间、线程 ID、进程 ID 等详细信息 |
-v long |
显示所有详细信息(多行) |
📌 示例(时间戳格式):
adb logcat -v time
✅ -s
:指定 Tag 过滤(silent 其他)
只显示指定 tag 的日志,其他全部静默(不显示)。
📌 示例(只显示 tag 为 MyApp
的日志):
adb logcat -s MyApp
你也可以指定级别:
adb logcat -s MyApp:D
等级 | 含义 |
---|---|
V | Verbose |
D | Debug |
I | Info |
W | Warn |
E | Error |
F | Fatal |
S | Silent(不输出) |
📌 多个 tag:
adb logcat -s MyApp:D SystemService:W
✅ -b
:选择日志缓冲区(buffer)
Android 有多个日志缓冲区:
命令 | 含义 |
---|---|
main |
主日志(App 的 Log.d / Log.i 等) |
system |
系统服务日志 |
radio |
通信模块(RIL)日志 |
events |
事件日志 |
crash |
崩溃日志(Android 7+) |
📌 示例:只查看 crash 日志
adb logcat -b crash
📌 查看多个缓冲区:
adb logcat -b main -b system -b crash
✅ 其他常用参数
参数 | 含义 |
---|---|
* |
所有标签 |
*:E |
显示所有 tag 中的 error 日志 |
*:W |
所有 tag 的 warn 级别及以上 |
-d |
只输出当前日志,不实时监听(dump) |
-c |
清空日志缓冲区 |
-t <N> |
输出最近 N 条日志 |
-T <time> |
从某时间开始输出日志(如 "07-05 15:30:00.000" ) |
✅ 常见组合示例
- 查看最近 100 条 error 日志:
adb logcat -v time -t 100 *:E
- 只看 app 的日志(假设 tag 是
MyApp
):
adb logcat -v threadtime -s MyApp
- 过滤多个模块的 debug 日志:
adb logcat -v time -s Tag1:D Tag2:D
- 同时查看 main、system 缓冲区的 warn+error 日志:
adb logcat -b main -b system -v time *:W
- 清空日志再重新开始查看:
adb logcat -c && adb logcat -v time
二 示例
1 abc_crash_log.bat
@echo off
chcp 65001 >nul
echo 抓取系统 crash 日志(含 native 和 Java 崩溃)...
adb logcat -b crash > D:\Android\androidDemo\logContent\abc_crash_log.txt"
2 查看Logger tag的日志
@echo off
chcp 65001 >nul
echo 过滤 tag 为 Logger 的日志...
adb logcat -s Logger > D:\Android\androidDemo\logContent\abc_tag_log.txt"
3 只查看某个app(com.xx.xx)的日志
@echo off
chcp 65001 >nul
setlocal
echo 获取 com.xx.xx 的 PID...
FOR /F "delims=" %%i IN ('adb shell pidof com.xx.xx') DO set PID=%%i
if "%PID%"=="" (
echo ❌ 获取 PID 失败,可能 app 未启动。
pause
exit /b
)
echo 当前 PID: %PID%
echo 开始抓取日志,仅限 PID=%PID%
:: 日志输出路径
set OUTDIR=D:\Android\xx\xx
set OUTFILE=%OUTDIR%\abc_log.txt
:: 确保输出目录存在
if not exist "%OUTDIR%" (
mkdir "%OUTDIR%"
)
:: 删除旧日志
if exist "%OUTFILE%" (
del "%OUTFILE%"
)
:: 启动一个后台 PowerShell 进程来保持 logcat 流式写入 UTF-8 文件
powershell -Command "Start-Process cmd -ArgumentList '/c adb logcat -v time --pid=%PID% > \"%OUTFILE%\"' -WindowStyle Hidden"
echo ✅ 日志正在写入:%OUTFILE%
echo (请使用 VS Code 或 Notepad++ 打开,查看 UTF-8 中文)
pause
三 日志输出到android 目录
1 crash_log.bat
@echo off
chcp 65001 >nul
echo 抓取系统 crash 日志(含 native 和 Java 崩溃)...
echo 在车机设备中创建 logs 目录(如果不存在)...
adb shell "mkdir -p /sdcard/logs"
echo 删除旧 crash 日志(如果存在)...
adb shell "rm -f /sdcard/logs/abc_crash_log.txt"
echo 开始抓取 crash 日志,输出到车机设备 /sdcard/logs/abc_crash_log.txt
adb shell "logcat -b crash -v time -f /sdcard/logs/abc_crash_log.txt"
2 logger tag.bat 日志
@echo off
chcp 65001 >nul
echo 抓取 tag 为 Logger 的日志...
echo 在车机设备中创建 logs 目录(如果不存在)...
adb shell "mkdir -p /sdcard/logs"
echo 删除旧 Logger 日志(如果存在)...
adb shell "rm -f /sdcard/logs/abc_tag_log.txt"
echo 开始抓取 Logger 日志,输出到车机设备 /sdcard/logs/abc_tag_log.txt
adb shell "logcat -s Logger -v time -f /sdcard/logs/abc_tag_log.txt"
3 抓取单个 app日志
::abc_log_pid_android.bat
@echo off
chcp 65001 >nul
echo 获取 com.xx.xx 的 PID...
FOR /F "delims=" %%i IN ('adb shell pidof com.xx.xx') DO set PID=%%i
echo 当前 PID: %PID%
echo 开始抓取日志,仅限 PID=%PID%
echo 在车机设备中创建 logs 目录(如果不存在)...
adb shell "mkdir -p /sdcard/logs"
echo 删除旧日志文件(如果存在)...
adb shell "rm -f /sdcard/logs/abc_log.txt"
echo 开始抓取日志,仅限 PID=%PID%,输出到车机设备 /sdcard/logs/abc_log.txt
adb shell "logcat --pid=%PID% -v time -f /sdcard/logs/abc_log.txt"
::adb pull /sdcard/logs/abc_log.txt D:\Android\logContent\abc_log_android.txt