Android Logcat 过滤、缓冲区与后台记录

本文整理 Android Logcat 的过滤、缓冲区设置、按应用导出,以及断开电脑后继续记录的方法。

过滤 System.err

Android Studio Logcat 查询框:

1
package:mine -tag:System.err

终端命令:

1
adb logcat '*:V' 'System.err:S'

增大缓冲区

Android Studio:

1
Android Studio → Settings… → Tools → Logcat → Logcat cycle buffer size

单位为 KB,例如填写 65536 表示 64 MB。

设备端缓冲区:

1
2
adb logcat -g                 # 查看当前大小
adb logcat -b all -G 64M # 设置为 64 MB

直接写入文件可以避免 Android Studio 显示缓存覆盖旧日志。

导出指定包的当前日志

下面的命令导出当前 Logcat 缓冲区中指定应用的全部级别日志,并保存到本地输出目录。-v threadtime 生成的文件可以导入 Android Studio。

1
2
3
4
5
6
7
PKG='<package-name>'
APP_UID=$(adb shell cmd package list packages -U "$PKG" \
| awk -v pkg="$PKG" '$1=="package:" pkg {sub("uid:","",$2); print $2}' \
| tr -d '\r')

adb logcat -d -b all --uid="$APP_UID" -v threadtime '*:V' \
> "<local-output-directory>/${PKG}_$(date '+%Y-%m-%d_%H%M%S').logcat"

断开电脑后继续记录

在断开 USB 前执行下面的命令。日志会写入手机的 /sdcard/Download/logcat,手机重启会停止记录,但单纯断开 USB 不会。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
adb shell '
PKG='<package-name>'
PID_FILE=/data/local/tmp/logcat.pid
LOG_DIR=/sdcard/Download/logcat

APP_UID=$(cmd package list packages -U "$PKG" |
sed -n "s/^package:$PKG uid://p")

mkdir -p "$LOG_DIR"
START=$(date "+%m-%d %H:%M:%S.000")
OUT="$LOG_DIR/${PKG}_$(date +%Y-%m-%d_%H%M%S).logcat"

nohup logcat \
-b all \
--uid="$APP_UID" \
-T "$START" \
-v threadtime \
-f "$OUT" \
-r 10240 \
-n 20 \
"*:V" >/dev/null 2>&1 &

echo $! > "$PID_FILE"
echo "开始时间:$START"
echo "日志文件:$OUT"
'

说明:

  • -T(大写)从命令启动时间开始记录,不会把之前缓冲区中的旧日志写入文件。
  • -r 10240 表示单个文件达到 10 MB 时轮转。
  • -n 20 表示最多保留 20 个轮转文件。
  • 若要记录当前缓冲区中已有的旧日志,删除 -T "$START"

停止记录并取回日志

停止手机上的后台 Logcat:

1
2
3
4
5
adb shell '
PID=$(cat /data/local/tmp/logcat.pid 2>/dev/null)
[ -n "$PID" ] && kill "$PID"
rm -f /data/local/tmp/logcat.pid
'

将日志复制到电脑:

1
2
adb pull /sdcard/Download/logcat \
"<local-output-directory>/"

Android Logcat 过滤、缓冲区与后台记录

https://ganzhixiong.com/p/5b7887a3/

Author

干志雄

Posted on

2026-09-01

Updated on

2026-09-01

Licensed under

Comments