Android 10 根文件系统和编译系统(六):log系统和logcat命令

 配套系列教学视频链接:

Android 10.0 AOSP源码编译:

        AOSP源码开发环境搭建教学视频-百问100ask   

       Android系统 10.0 AOSP源码编译--CSDN程序员研修院

 Android 10.0 根文件系统和编译系统:

        Android根文件系统和编译系统教学视频-百问100ask

        Android 10.0 根文件系统和编译系统-CSDN程序员研修院


说明

系统:AOSP Android10.0

设备:Android模拟器

前言

本章节重点介绍Android log系统框架, 以及logcat命令的使用, 方便查看Android系统日志和调试


一,log系统框架

 Android 日志系统由以下几个部分构成:

1, logd守护进程 : 负责维护几个环形缓冲区, 用于存放系统中各种日志, 缓冲区包含main, system, events, radio, crash, kernel, 并且建立三个套接字,用于和客户端进行通信。

2, liblog:为应用空间提供API的实现, 该库通过套接字和logd通信, 对于应用层而言, 不需要关系具体实现细节。

3,  logcat命令:用户查看各种缓冲区日志, 内部实现是调用了liblog 

4,   Log API :  接口分为 java层和native层(c/c++).方便用户程序调用。 

Android Log的套接字

/dev/socket/logd : SOCK_STREAM 提供的是可靠的流数据(类比于 TCP),

/dev/socket/logdr : SOCK_SEQPACKET 则提供可靠的基于包的数据(可靠的UDP),

/dev/socket/logdw: SOCK_DGRAM 可以用 UDP 来类比,不可靠的包传输。

这三个 socket 的功能如下:

socket logd:  用于外接受控制命令

客户端通过 logdr 读取 log 数据。使用 seqpacket,可以让用户在可靠地读取数据的同时,一次读取一条 log

客户端通过 logdw 写入 log 数据。由于类型是 dgram,在非常繁忙的时候,log 可能会丢失。但是,这可以避免客户端阻塞在写 log 的调用上

Android log 缓冲区

radio:查看包含无线装置/电话相关消息的缓冲区。

events:查看已经过解译的二进制系统事件缓冲区消息。

main:查看主日志缓冲区(默认),不包含系统和崩溃日志消息。

system:查看系统日志缓冲区(默认)。

crash:查看崩溃日志缓冲区(默认)。

all:查看所有缓冲区。

default:报告 main、system 和 crash 缓冲区。

 二, logcat命令使用

Log日志的基本格式:

日期       时间           进程号  线程号  级别   标签tag         信息

08-03 21:48:18.937  1448    1448      D        hostapd   :    nl80211: send_mlme -> send_frame

Log日志级别:

  V    Verbose (default for <tag>)

  D    Debug (default for '*')

  I    Info

  W   Warn

  E    Error

  F    Fatal

  S    Silent (suppress all output)

常见命令:

logcat  -b  <buffer> : 指定输出缓冲区

例子: logcat  -b system   

logcat  -b  system,main,crash

logcat –b all

logcat -b kernel  //需要root权限

过滤: 

logcat -s  “dalvikvm:E”   : 只输出dalvikvm 标签的 Error以上级别的日志

logcat WifiHW:D  dalvikvm:I  *:S   同时输出 WifiHW 标签 的 Debug 以上级别 和 dalvikvm 标签的 Info 以上级别的日志。(--注意 *:S : 如果没有 *S 就会输出错误, 最后一个元素 *:S 将所有标记的优先级设为“静默”,从而确保系统仅显示带有“WifiHW”和“dalvikvm”标记的日志消息。)

命令选项参考官网:Logcat 命令行工具  |  Android 开发者  |  Android Developers

选项

说明

-b <buffer>

加载可供查看的备用日志缓冲区,例如 events 或 radio。默认使用 mainsystem 和 crash 缓冲区集

-c, --clear

清除(清空)所选的缓冲区并退出。默认缓冲区集为 mainsystem 和 crash。如需清除所有缓冲区,请使用 -b all -c

-e <expr>, --regex=<expr>

只输出日志消息与 <expr> 匹配的行,其中 <expr> 是正则表达式。

-m <count>, --max-count=<count>

输出 <count> 行后退出。这样是为了与 --regex 配对,但可以独立运行。

--print

与 --regex 和 --max-count 配对,使内容绕过正则表达式过滤器,但仍能够在获得适当数量的匹配时停止。

-d

将日志转储到屏幕并退出。

-f <filename>

将日志消息输出写入 <filename>。默认值为 stdout

-g, --buffer-size

输出指定日志缓冲区的大小并退出。

-n <count>

将轮替日志的数量上限设置为 <count>。默认值为 4。需要使用 -r 选项。

-r <kbytes>

每输出 <kbytes> 时轮替日志文件。默认值为 16。需要 -f 选项。

-s

相当于过滤器表达式 '*:S';它将所有标记的优先级设为“静默”,并用于放在可添加内容的过滤器表达式列表之前。如需了解详情,请转到介绍过滤日志输出的部分。

-v <format>

设置日志消息的输出格式。默认格式为 threadtime。如需查看支持的格式列表,请参阅介绍控制日志输出格式的部分。

-D, --dividers

输出各个日志缓冲区之间的分隔线。

-c

清空(清除)整个日志并退出。

-t <count>

仅输出最新的行数。此选项包括 -d 功能。

-t '<time>'

输出自指定时间以来的最新行。此选项包括 -d 功能。如需了解如何引用带有嵌入空格的参数,请参阅 -P 选项

adb logcat -t '01-26 20:52:41.820'

-T <count>

输出自指定时间以来的最新行数。此选项不包括 -d 功能。

-T '<time>'

输出自指定时间以来的最新行。此选项不包括 -d 功能。如需了解如何引用带有嵌入空格的参数,请参阅 -P 选项

adb logcat -t '01-26 20:52:41.820'

-L, -last

在最后一次重新启动之前转储日志。

-B, --binary

以二进制文件形式输出日志。

-S, --statistics

在输出中包含统计信息,以帮助您识别和定位日志垃圾信息发送者。

-G <size>

设置日志环形缓冲区的大小。可以在结尾处添加 K 或 M,以指示单位为千字节或兆字节。

-p, --prune

输出(读取)当前的允许 (white) 列表和拒绝 (black) 列表,不采用任何参数,如下所示:

adb logcat -p

-P '<list> ...'
--prune '<list> ...' -P '<white_and_black_list>'

写入(设置)允许 (white) 列表和拒绝 (black) 列表以出于特定目的调整日志记录内容。您可以提供允许 (<white>) 列表和拒绝 (~<black>) 列表条目的混合内容,其中 <white> 或 <black> 可以是 UID、UID/PID 或 /PID。在 Logcat 统计信息 (logcat -S) 的指导下,您可以考虑出于各种目的调整允许 (white) 列表和拒绝 (black) 列表,例如:

  • 通过 UID 选择使特定日志记录内容具有最长保留期限。
  • 阻止人 (UID) 或物 (PID) 消耗相应资源,以帮助增加日志跨度,从而更深入地了解正在诊断的问题。

默认情况下,日志记录系统会自动以动态方式阻止日志统计信息中最严重的违规内容,以便为新的日志消息腾出空间。一旦它用尽启发法,系统便会删除最旧的条目,以便为新消息腾出空间。

添加许可名单 (whitelist) 可保护您的 Android 识别码 (AID),它会变成进程的 AID 和 GID,而不会被声明为违规内容;添加拒绝列表有助于在相应内容被视为最严重的违规内容之前即释放空间。您可以选择删除内容的程度和频率;也可以关闭删除功能,这样,系统便仅会移除各个日志缓冲区中最旧条目的内容。

引号

adb logcat 不会保留引号,因此指定允许 (white) 列表和拒绝 (black) 列表的语法如下所示:

$ adb logcat -P '"<white_and_blacklist>"'

or

adb shell

$ logcat -P '<white_and_blacklist>'

以下示例指定了一个包含 PID 32676 和 UID 675 的允许 (white) 列表,以及一个包含 PID 32677 和 UID 897 的拒绝 (black) 列表。拒绝列表中的 PID 32677 经过加权处理,以便可以更快删除。

adb logcat -P '"/32676 675 ~/32677 897"'

其他您可以使用的允许 (white) 列表和拒绝 (black) 列表命令变体如下所示:

~! worst uid blacklist

~1000/! worst pid in system (1000)

--pid=<pid> ...

仅输出来自给定 PID 的日志。

--wrap

休眠 2 小时或者当缓冲区即将封装时(两者取其先)。通过提供即将封装唤醒来提高轮询的效率。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旗浩QH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值