logcat是android中的一个命令行工具,可以用于得到程序的log信息。下面介绍 adb logcat中的详细参数命令以及如何才能高效的打印日志,或把日志保存到我们指定的位置。
可以输入 adb logcat --help
,查看一下一些简单的数据格式:
adb logcat --help
输出结果:
Usage: logcat [options] [filterspecs]
General options:
-b, --buffer= Request alternate ring buffer(s):
main system radio events crash default all
Additionally, 'kernel' for userdebug and eng builds, and
'security' for Device Owner installations.
Multiple -b parameters or comma separated list of buffers are
allowed. Buffers are interleaved.
Default -b main,system,crash,kernel.
-L, --last Dump logs from prior to last reboot from pstore.
-c, --clear Clear (flush) the entire log and exit.
if -f is specified, clear the specified file and its related rotated
log files instead.
if -L is specified, clear pstore log instead.
-d Dump the log and then exit (don't block).
--pid= Only print logs from the given pid.
--wrap Sleep for 2 hours or when buffer about to wrap whichever
comes first. Improves efficiency of polling by providing
an about-to-wrap wakeup.
Formatting:
-v, --format= Sets log print format verb and adverbs, where is one of:
brief help long process raw tag thread threadtime time
Modifying adverbs can be added:
color descriptive epoch monotonic printable uid usec UTC year zone
Multiple -v parameters or comma separated list of format and format
modifiers are allowed.
-D, --dividers Print dividers between each log buffer.
-B, --binary Output the log in binary.
Outfile files:
-f, --file= Log to file instead of stdout.
-r, --rotate-kbytes= Rotate log every kbytes. Requires -f option.
-n, --rotate-count= Sets max number of rotated logs to , default 4.
--id= If the signature for logging to file changes, then clear the
associated files and continue.
Logd control:
These options send a control message to the logd daemon on device, print its return message if
applicable, then exit. They are incompatible with -L, as these attributes do not apply to pstore.
-g, --buffer-size Get the size of the ring buffers within logd.
-G, --buffer-size= Set size of a ring buffer in logd. May suffix with K or M.
This can individually control each buffer's size with -b.
-S, --statistics Output statistics.
--pid can be used to provide pid specific stats.
-p, --prune Print prune rules. Each rule is specified as UID, UID/PID or /PID. A
'~' prefix indicates that elements matching the rule should be pruned
with higher priority otherwise they're pruned with lower priority. All
other pruning activity is oldest first. Special case ~! represents an
automatic pruning for the noisiest UID as determined by the current
statistics. Special case ~1000/! represents pruning of the worst PID
within AID_SYSTEM when AID_SYSTEM is the noisiest UID.
-P, --prune=' ...' Set prune rules, using same format as listed above. Must be quoted.
Filtering:
-s Set default filter to silent. Equivalent to filterspec '*:S'
-e, --regex= Only print lines where the log message matches where is
an ECMAScript regular expression.
-m, --max-count= Quit after printing lines. This is meant to be paired with
--regex, but will work on its own.
--print This option is only applicable when --regex is set and only useful if
--max-count is also provided.
With --print, logcat will print all messages even if they do not
match the regex. Logcat will quit after printing the max-count number
of lines that match the regex.
-t Print only the most recent lines (implies -d).
-t '
log类是一个日志类,可以在代码中使用logcat打印出消息。常见的日志记录方法包括。
方法 |
描述 |
v(String,String) (vervbose) |
显示全部信息 |
d(String,String)(debug) |
显示调试信息 |
i(String,String)(information) |
显示⼀般信息 |
w(String,String)(waning) |
显示警告信息 |
e(String,String)(error) |
显示错误信息 |
例如:
// 开发过程中获取 log
Log.i("MyActivity","MyClass.getView() - get item number"+position);
//adb 获取 log
adb logcat
adb logcat 输出的⽇志格式如下:
I/ActivityManager( 1754): Waited long enough for: ServiceRecord{2b24178c u0
com.google.android.gms/.checkin.CheckinService}
语法格式:
[adb] logcat [] … [ ] …
PC 端使⽤: adb logcat
shell 模式下使⽤: logcat
Android 日志系统为日志消息保留了多个环形缓冲区,但并非多有的日志消息都会发送到默认的环形缓冲区。这里可以采用 logcat -b 命令查看设备的其他缓冲区:
缓冲区 |
描述 |
举例 |
radio |
输出通信系统的日志,包含无线装置/电话相关消息 |
logcat -b radio |
events |
输出event模块的日志 |
logcat -b events |
main |
主日志缓冲区(默认),不包含系统和崩溃日志消息 |
logcat -b main |
system |
输出系统日志 |
logcat -b system |
crash |
输出崩溃日志 |
logcat -b crash |
all |
输出所有缓冲区日志 |
logcat -b all |
default |
输出main、system、crash缓冲区日志 |
logcat -b default |
参数 |
含义 |
举例 |
-b |
加载⼀个可使⽤的⽇志缓冲区供查看,⽐如 event和 radio 。默认值是 main |
logcat -b system |
-B |
以二进制文件形式输出日志 |
|
-c |
清除缓冲区中的全部⽇志并退出(清除完后可以使⽤ -g 查看缓冲区)默认清除 |
logcat -c;logcat -b all -c |
-d |
将缓冲区的 log 转存到屏幕中然后退出 |
logcat -d > log.txt |
-f |
将 log 输出到指定的⽂件中 < ⽂件名 >. 默认为标准输出( stdout ) |
logcat -f sdcard/log.txt |
-g |
打印⽇志缓冲区的大小并退出 |
logcat -g |
-G |
设置日志环形缓冲区的大小,可以在结尾处添加 |
logcat -G 2M |
-n |
设置⽇志的最⼤数⽬,默认值是 4 ,需要和 -r 选项⼀起使⽤ |
|
-r |
每时输出⽇志,默认值是 16 ,需要和 -f 选项⼀起使⽤ |
logcat -f sdcard/log.txt -r 1 |
-s |
输出指定 tag 的日志,相当于过滤器表达式 *:S |
logcat -s tag |
-S |
在输出中包含统计信息,以识别和定位日志垃圾信息发送者 |
|
-v |
设置输出格式的⽇志消息。默认是短暂的格式。⽀持的格式列表 |
logcat -v threadtime |
-m |
输出 行后退出 |
logcat -m 5 |
-D |
输出各个日志缓冲区之间的分隔线 |
logcat -D … |
-e |
输出正则匹配的日志消息 |
logcat -e [匹配数据] -m 5 |
-t |
仅输出最新的行数,此选项包括 -d 功能 |
logcat -t 5 |
-t ' |
输出自指定时间以来的最新行,此选项包括 -d 功能 |
logcat -t ‘01-26 20:52:41.820’ |
--pid= |
仅输出来自给定 PID 的日志 |
logcat --pid=4321 |
⼀般⻓时间输出 log 的话建议 -f , -n , -r 三个参数连⽤,这样当⼀个⽂件⽇志输出满了之后可以⻢上在另⼀个中进⾏输出。
Android
日志系统为日志消息保留了多个环形缓冲区,但并非多有的日志消息都会发送到默认的环形缓冲区。
logcat -b
是logcat
命令的一个选项,用于指定查看日志缓冲区。你可以用它来查看不同类型的日志缓冲区。下面是基本用法:
logcat -b events|grep -E "am_proc_start|input_focus.*entering"
shCopy Code
adb logcat -b
main
: 默认缓冲区,包含大多数应用程序和系统日志。
system
: 系统日志缓冲区,包含系统服务和硬件相关日志。
events
: 事件日志缓冲区,记录系统事件和调试信息。
crash
: 崩溃日志缓冲区,记录应用崩溃的信息。
查看主缓冲区日志:
shCopy Code
adb logcat -b main
查看系统缓冲区日志:
shCopy Code
adb logcat -b system
查看事件缓冲区日志:
shCopy Code
adb logcat -b events
查看崩溃缓冲区日志:
shCopy Code
adb logcat -b crash
这些选项帮助你根据需要过滤和查看不同类型的日志数据。
⽇志消息包含⼀个元数据字段,除了标签和优先级,您可以修改输出显示⼀个特定的元数据字段格式的消息。为此,您使⽤-v 选项来指定⼀个⽀持的输出格式。⼀下为⽀持的格式:
格式 |
含义 |
brief |
显示优先级 / 标记和过程的 PID 发出的消息(默认格式) |
process |
只显示PID |
tag |
只显示优先级/标记 |
raw |
显示原始的⽇志消息,没有其他元数据字段 |
time |
调⽤显示⽇期、时间、优先级 / 标签和过程的 PID 发出消息 |
thread |
旧版格式,显示优先级、PID 以及发出消息的线程的 TID |
threadtime |
调⽤显示⽇期、时间、优先级、标签遗迹 PID TID线程发出的消息 |
long |
显示所有元数据字段与空⽩⾏和单独的消息 |
color |
使用不同的颜色来显示每个优先级 |
descriptive |
显示日志缓冲区事件说明。此修饰符仅影响事件日志缓冲区消息,不会对其他非二进制文件缓冲区产生任何影响 |
epoch |
显示自 1970 年 1 月 1 日以来的时间(以秒为单位) |
uid |
如果访问控制允许,则显示 UID 或记录的进程的 Android ID |
usec |
显示精确到微秒的时间 |
UTC |
显示 UTC 时间 |
year |
将年份添加到显示的时间 |
zone |
将本地时区添加到显示的时间 |
当 logcat 开始,指定想要输出格式 -v 选项:
[adb] logcat [-v ]
adb logcat –v thread
只能指定⼀个输出格式 -v。
按日志级别过滤日志:
adb logcat [:priority]
tag
表示标签;priority
表示输出级别;
日志默认级别是 V
,如果错误日志我们选择 E
就可以,Android
的日志分为如下几个优先级(priority):
选项 |
描述 |
举例 |
V |
–Verbose(最低优先级) |
adb logcat *:V |
D |
– Debug |
adb logcat *:D |
I |
– Info |
adb logcat *:I |
W |
– Warning |
adb logcat *:W |
E |
– Error |
adb logcat *:E |
F |
– Fatal |
adb logcat *:F |
S |
– Silent |
adb logcat *:S |
*
可以是某个tag
,如果没有指明,就表示所有。