adb笔记2:adb logcat的使用

1. adb logcat简单使用

# 1. 打印默认日志
adb logcat
1-1 adb logcat
# 2. 显示日志详细时间的简单数据
adb logcat -v time
1-3 adb logcat -v time
# 3. 打印级别是Error的信息
adb logcat *.E

Usage: logcat [options] [filterspecs]
 filterspecs 格式: [:priority]

where  is a log component(组件) tag (or * for all) and priority is:
  V    Verbose (default for ),默认级别,最低输出最多
  D    Debug (default for '*')
  I    Info
  W    Warn
  E    Error
  F    Fatal致命
  S    Silent (suppress all output)静音(抑制所有的输出)

'*' by itself means '*:D' and  by itself means :V.
If no '*' filterspec or -s on command line, all filter defaults to '*:V'.
eg: '*:S ' prints only , ':S' suppresses all  log messages.

If not specified on the command line, filterspec is set from ANDROID_LOG_TAGS.
 表示标签,用*表示所有,priority输出的级别

1-6 adb logcat *:E
# 4. 将日志保存在PC指定位置,如c:\testing\log.txt
adb logcat -v time *:E >c:\testing\log.txt
1-7 adb logcat -v time *:E >c:\testing\log.txt

没有过滤条件,log较多,很难找到想要的信息

2. 按级别过滤log

adb logcat [:priority]

3. 按tag和级别过滤日志

可以由多个[:priority]组成
adb logcat PushService:I ActivityManager:W *:S
表示输出PushService的Info以上级别日志,ActivityManager的Warning以上级别日志,及其他tag的Slient级别日志(即屏蔽其他log)

3-1 多个tag

4. adb logcat 选项解析

Usage: logcat [options] [filterspecs]
options include:
  -s              Set default filter to silent. Equivalent to filterspec '*:S'
                   相当于*:S,故无log输出
  -f , --file=               Log to file. Default is stdout标准输出流,-f输出不成功报错:couldn't open output file
  -r , --rotate-kbytes=
                  Rotate log every kbytes. Requires -f option
                  按照千字节输出日志;与-f一起使用,但执行不成功
  -n , --rotate-count=
                  Sets max number of rotated logs to , default 4
                  设置log输出的最大数;执行效果感觉与adb logcat一样
  -v , --format= 设置输出log的格式;已详说
  -c, --clear     Clear (flush) the entire log and exit
                  if Log to File specified, clear fileset instead
                 清空所有的log缓存信息
  -d              Dump the log and then exit (don't block)
                    将缓存日志输出到屏幕上,并且不会阻塞
  -t       Print only the most recent  lines (implies -d)
                            输出最近几行log,输出后退出不阻塞
  -t '
# adb logcat -t 
C:\Windows\system32>adb logcat -t 5
--------- beginning of main
04-27 18:19:02.621 28185 28185 D UploadVoiceJobService: needUploadVoice timeSinceLastUpload = 2719490
04-27 18:19:03.518  2103  2145 D CompatibilityInfo: mCompatibilityFlags - 0
04-27 18:19:03.518  2103  2145 D CompatibilityInfo: applicationDensity - 440
04-27 18:19:03.518  2103  2145 D CompatibilityInfo: applicationScale - 1.0
04-27 18:19:06.578 28185 28204 I AnrWatcher: check anr normal9

C:\Windows\system32>
# ------------------------------------------------------------------------------------------------------
# adb logcat -g
C:\Windows\system32>adb logcat -g
main: ring buffer is 2Mb (473Kb consumed), max entry is 5120b, max payload is 4068b
system: ring buffer is 4Mb (34Kb consumed), max entry is 5120b, max payload is 4068b
crash: ring buffer is 1Mb (0b consumed), max entry is 5120b, max payload is 4068b

C:\Windows\system32>
4.1 adb logcat -v
-v , --format= options:
  Sets log print format verb and adverbs(副词), where  is:
    brief long process raw tag thread threadtime time
  and individually(单独) flagged modifying adverbs can be added:
    color descriptive epoch monotonic printable uid usec UTC year zone

Single format verbs:
  long       — Display(显示) all metadata(元数据) fields, separate messages with blank lines.
  raw        — Display the raw(原始) log message, with no other metadata fields.
1-2 adb logcat -v
1) brief

默认输出格式:/():

C:\testing>adb logcat -t 3 -v brief
--------- beginning of main
I/encent.mobileq(26197): The ClassLoaderContext is a special shared library.
D/PatchLogTag(26197): DexPatchInstaller injectDexPatch result=500, inject cost time=9 ms.
W/System  (26177): A resource failed to call close.

C:\testing>
2) long

输出格式:[ : /] <换行> <空行>

C:\testing>adb logcat -t 3 -v long
--------- beginning of main
[ 04-27 17:49:22.878  2632:11232 I/chatty   ]
uid=1001(radio) Binder:2632_E expire 2 lines

[ 04-27 17:49:22.888  2632:11232 E/PhoneInterfaceManager ]
[PhoneIntfMgr] checkCarrierPrivilegesForPackage: No UICC

[ 04-27 17:49:26.119 26585:26604 D/NetworkStateReceiver ]
sWifiStrengthLevel = 3


C:\testing>
3) process

输出格式:()

C:\testing>adb logcat -t 3 -v process
--------- beginning of main
D( 2103) applicationScale - 1.0  (CompatibilityInfo)
I( 3338) GraphicDumpService onStartJob  (MiuiPerfServiceClient)
I( 3338) GraphicDumpService onStopJob  (MiuiPerfServiceClient)

C:\testing>
4) raw

输出格式:

C:\testing>adb logcat -t 3 -v raw
--------- beginning of main
[PhoneIntfMgr] checkCarrierPrivilegesForPackage: No UICC
[PhoneIntfMgr] checkCarrierPrivilegesForPackage: No UICC
[process] filterRealForegroundProcMap: invoked.  realProcMap: {com.tencent.mobileqq=1619516235572}

C:\testing>
5) tag

输出格式:/:

C:\testing>adb logcat -t 3 -v tag
--------- beginning of main
D/UploadVoiceJobService: needUploadVoice timeSinceLastUpload = 554317
--------- beginning of system
E/storaged: getDiskStats failed with result NOT_SUPPORTED and size 0
D/KeyguardUpdateMonitor: handleTimeUpdate

C:\testing>
6) thread

输出格式:(:)

C:\testing>adb logcat -t 3 -v thread
--------- beginning of main
D( 2412: 2412) handleTimeUpdate
D(26197:26262) 848QQDT [supplementReportForSwitchAccount] startTimestamp is 0
D(26302:26435) Kill MSF check result[ senderSize:0,sendInterval:949668,receiveInterval=55922,addCmdCount=9

C:\testing>
7) threadtime

输出格式: :

C:\testing>adb logcat -t 3 -v threadtime
--------- beginning of main
04-27 17:47:19.174  2412  2412 D KeyguardUpdateMonitor: handleBatteryUpdate
04-27 17:47:19.178 26585 26585 D UploadVoiceJobService: needUploadVoice timeSinceLastUpload = 816047
04-27 17:47:28.291 26197 26247 D GuardManager.GuardStateScheduler: [process] filterRealForegroundProcMap: invoked.  realProcMap: {com.tencent.mobileqq=1619516235572}

C:\testing>
8) time

输出格式: /():

C:\testing>adb logcat -t 3 -v time
--------- beginning of main
04-27 17:46:46.782 D/CompatibilityInfo( 2103): applicationDensity - 440
04-27 17:46:46.783 D/CompatibilityInfo( 2103): applicationScale - 1.0
04-27 17:46:52.261 D/GuardManager.GuardStateScheduler(26197): [process] filterRealForegroundProcMap: invoked.  realProcMap: {com.tencent.mobileqq=1619516235572}

C:\testing>

-v time:打印普通日志
-v threadtime:查看线程
其他的使用较少

4.2 adb logcat -c

adb logcat -c用来清除缓存信息
直接显示log,是会显示很多的,好像是从设备最近一次开机开始的
建议:先-c清除,然后再触发事件,查看最近的日志信息

5. 日志脚本

5.1 clearLogCache.bat
adb logcat -c
5.2 getLog.bat
adb wait-for-device
adb devices
adb logcat -v threadtime >logs\"%date:~,4%%date:~5,2%%date:~8,2%_%time:~,2%%time:~3,2%%time:~6,2%_log.txt"
pause
5.3 获取指定包的log
@echo off
echo Please enter your PackageName:
SET /p PackageName = 
echo Your PackageName is %PackageName %
adb logcat | findstr %PackageName % > logs\"%PackageName %_%date:~,4%%date:~5,2%%date:~8,2%_%time:~,2%%time:~3,2%%time:~6,2%_log.txt"
pause

养成adb脚本的编写,对重复性的adb命令操作有很大作用。

参考信息:使用adb logcat命令显示Android设备上的Log日志

你可能感兴趣的:(adb笔记2:adb logcat的使用)