问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Android 日志系统分析(二):logd

发布网友 发布时间:2022-11-20 10:06

我来回答

1个回答

热心网友 时间:2023-06-23 10:34

logd守护进程是日志系统的管家,内部维持三个日志 Socket: logd、logdr、logdw来与客户端进行通信。同时负责维护几个环形缓冲区,用于存放系统中的各种日志,缓冲区包含 main、system、events、radio、crash、kernel;但是在 Android 5.0之前,logd进程并不存在,日志是保留在 /dev/log/main、/dev/log/system、/dev/log/radio、/dev/log/event等节点中,但是这样面临的一个问题就是当 Android系统大版本升级时,linux kernel需要升级对应的日志驱动,因此在后续的版本中就有了 logd进程。

在 Android 日志系统分析(一):概述 一文中,总结了整个日志读写的主要流程,因此对于 logd进程是如何同外界沟通进而读写日志的过程不再赘述,而着重于 logd本身的一些知识点,这里先看一下 logd的系统框图:

知识点:

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日志量比较大,可用于日志裁剪相关

main函数中,会打开 /dev/kmsg来读取内核日志,通过 LogKlog来进行存储;若是配置了 ro.logd.kernel属性,则打开 /proc/kmsg读取内核日志;

logd作为 Native Service,系统启动时会读取 init.rc脚本去启动,它的相关属性被定义在 logd.rc文件中:

这里主要分为两部分:启动 logd 服务启动 logd-reinit 服务(在Android 10 上添加了 logd-auditctl 服务,目的是为了* selinux denia打印日志为5秒一次);先来看一下 启动 logd 服务的同时做了些什么:

① 创建 logd、logdr、logdw这三个 socket为后面的通信做准备
logdw定义为 dgram类型的 socket,类似与 UDP类型的 Socket,这么做的原因是考虑到性能问题,在多个进程同时写日志的情况下,write函数写入到 socketbuffer中即可返回,这样不会 block业务逻辑太长时间。如果是 TCP类型的 Socket,客户端需要等到 TCP收到 ACK响应才能返回,这样就会过多的消耗性能和资源;

启动 logd-reinit 服务:

这个服务的主要作用是重新初始化 logd的 LogBuffer,在配置中 oneshot表示开机只启动一次。在上面的 main.cpp中的 main函数内,logd在启动后,会创建一个线程 reinit_thread_start (),当 logd-reinit传入参数 reinit后,进行功能执行:

① 如果 reinit启动后,并且 /deg/kmsg打开成功,把 logd.daemon: renit写入 kmsg
② 重新初始化各个 log buffer的大小,以及其他参数的初始化,但不会重新生成 LogBuffer对象

main.cpp##main

main.cpp#reinit_thread_start()

[ 1 ] 深入理解安卓日志系统(logcat / liblog / logd)
[ 2 ] Android10.0 日志系统分析(二)-logd、logcat架构分析及日志系统初始化

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 辣小鸭锁鲜盒装有啥好处啊? 竹叶青独创的五重锁鲜科技是啥,有了解的吗? 美菱锁鲜区和成品区是什么意思? 三体双仓锁鲜是什么意思 小客服运动模拟器使用方法 股票维宏股份是什么股票?维宏股份利润增长股价跌?维宏股份 股吧? 维宏股份 个股分析?维宏股份股吧股票?维宏股份最新变动? 维宏股份为什么资金大流出?维宏股份2021业绩预计股吧?维宏股份股票大家... 深度分析维宏股份?股票维宏股份股吧?牛叉诊股维宏股份? 股票维宏股份股吧,股票300508股吧 广州可以养阿拉斯加吗 中餐商务宴请的注意事项 360神将三国加载不了是什么原因 三国志11神将绝技在哪得到的,还有霸王和飞将,怎么打不到? 征程三国神将宝库在哪 小米手环压力不同步 三国神将传电视版怎么不见了 美丽的家园作文加评语 临汾尧都区2020事业单位招聘什么时候考试? ...化妆视频的用的都是什么手机?或者说什么手机前置高清而且可以近距离... 索尼ex3200无法读取usb设置怎么办? 海尔XQG70-1279显示Err2是什么故障? SONY无法进入USB调试 索尼LT26iUSB连接模式打不开 请问 活动板房,活动别墅,的专业英语术语是怎样拼写的? 王牌战争大兔子的蓝图密码是多少 地中海航运为什么没上市 我包皮褪下来后,阴茎头冠是紫红色的,一碰还有点疼,请问是发炎吗?该怎... 菜单有什么菜,你最喜欢吃什么五年级上册英语作文? 为什么阴茎包皮上会有紫红色的斑点,请帮忙解决谢谢啊 写一篇英语作文the crazy recipe 北京民族文化宫大剧院附近有练琴的吗 WePlay钢琴课转让,哪个平台能放心一些? 上海中心68层餐厅怎么上去 新时代广东及其周边主要地区 固定资产增值如何进行账务处理 台剧《罪梦者》潇洒及饰演者介绍 黄雅莉说的潇洒哥是谁 两大央企重组,“通信航母”来了,通信行业竞争趋势如何 股票华通线缆几年前走势?华通线缆个股技术面分析?华通线缆 最新十大...