Android log 系统

一、android log 架构

在Android生态系统中有不同类型的日志: 主日志、Android系统日志、事件日志和Radio日志。主日志用于应用程序,events用于系统事件信息,radio用于电话相关信息,android system用于系统消息和调试。

Android日志系统包括一个内核驱动程序和用于存储Android日志消息的内核缓冲区,用于创建日志条目和访问日志消息的C、c++和Java类,一个用于查看日志消息的独立程序(logcat),以及查看和过滤来自主机的日志消息的能力(通过Android Studio或ddms)。

Linux内核中有四个不同的日志缓冲区,它们为系统的不同部分提供日志记录。所有的的缓冲区都在设备节点(硬件设备的虚化)“在/dev/log”下,有“/dev/log/main”, “/dev/log/radio”,“/dev/log/event”,“/dev/log/system”,分别对应主日志、事件日志、Radio日志和系统日志。

主日志使用android.util.Log打印,主要被应用使用。

系统日志使用android.util.Slog打印。许多android框架层的模块使用该工具打印日志,这样可以与应用日志区分开,避免其他日志干扰。

事件日志使用android.util.EventLog打印,输出二进制格式的日志。日志入口包含二进制tag code,后面跟二进制参数。二进制tag code存储在 /system/etc/event-log-tags。

/data/anr: Dalvik在anr上写堆栈跟踪,即“应用程序不响应”或“强制关闭”。

/data/dontpanic: 包含一些崩溃日志,包括跟踪。

/data/kernelpanics: —存储内核恐慌相关的日志。

/data/tombstones: 可以保存多个tombstone_nn文件(nn是一个从0到10的数字,在10之后再次重复它)。

1.1 Logd守护进程

logd守护进程,开机时由 init 进程拉起;logd 内部维护了一个 RAM buffer 用作日志的缓存。各个进程的日志都会写入此缓存中。如果日志大小超过缓存限定,就会删除最老的日志。

注意 logd 对外维护了 3 个 socket api :

  • dev/socket/logd : 传输控制指令

  • dev/socket/logw : 写日志

  • dev/socket/logr : 读日志

1.2 写日志流程

1.3 读日志

1.4 日志解析

不同于写日志的流程,日志在保存时是有特定的格式去存储。在读取时 logcat 作为读取的客户端是需要先对日志进行格式解析,并拼接为命令行可见的字符串,因此有了 processBuffer 的过程。同时 logcat 打印日志超过了文件大小限制,就需要调用 rotateLogs 函数去建立新的文件。

1.5 日志打印消耗资源

1:进程通信: 日志信息通过 socket 发送给 logd。

2:cpu 消耗: logd 中 ring buffer 会经常进行 pruneLogs 操作,删减日志,耗费CPU资源。

3:内存占用:logd 中维持对应的 buffer,RAM 的消耗。

4:io 读写消耗:在应用程序中 ,创建后台线程保存日志信息,这回导致应用或者整机卡顿。

二 、logd

2.1 知识点:

logd 是日志系统的核心进程,由 init 启动,是属于守护进程常驻后台 ② logd 维护各个日志节点缓存队列,提供 socket 接口进行读、写、控制功能 ③ logd 进程启动后,分别启动 LogReader、LogListener、CommandListener 三个线程,监听并处理来自三个 socket 的消息。在收到消息后,会通过 LogBuffer 类保存日志到对应的 RAM buffer 中 ④ LogAudit 模块用于接收 Kernel selinux 信息,即可以在用户空间打印 selinux 日志信息 ⑤ LogKlog 用于接收 kernel 日志信息,通过设置 property ,可以通过 logcat 命令读取内核日志 ⑥ LogStatistics 是日志统计模块,默认开启统计数据较少,仅能以 pid/uid 纬度统计打印日志的数量。如果设置了 logd.statistic = true 。会打印更多纬度的统计信息,包括哪些 pid/uid/tid/TAG 日志量比较大,可用于日志裁剪相关

2.2 logd 启动流程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值