adb logcat 查看日志

发布于:2025-07-10 ⋅ 阅读:(16) ⋅ 点赞:(0)

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"

✅ 常见组合示例

  1. 查看最近 100 条 error 日志
adb logcat -v time -t 100 *:E
  1. 只看 app 的日志(假设 tag 是 MyApp
adb logcat -v threadtime -s MyApp
  1. 过滤多个模块的 debug 日志
adb logcat -v time -s Tag1:D Tag2:D
  1. 同时查看 main、system 缓冲区的 warn+error 日志
adb logcat -b main -b system -v time *:W
  1. 清空日志再重新开始查看
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


网站公告

今日签到

点亮在社区的每一天
去签到