0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Android日志与logd交互过程

麦辣鸡腿堡 来源:OPPO内核工匠 作者:marc 2023-11-23 17:06 次阅读

2.2.3 Android日志与logd交互过程

2.2.3.1 Android日志传递给logd

Android app层或framework层,通过调用Log/Slog/Rlog中d方法打印日志,通过JNI会调用到native层android_util_Log_println_native接口,具体见下图内容。

图片

接下来具体调用流程如下:

/XXX/system/logging/liblog/logger_write.cpp

__android_log_buf_write

-->__android_log_write_log_message

-- >get_logger_function()

    -- >__android_log_logd_logger

       -- >write_to_log

          -- >LogdWrite

最终写到 “/dev/socket/logdw”中,此时logd中的LogListener会监测到存在log信息需要写入,待log保存到buffer中后,再通知LogReader将新保存的log传递给logcat等

socket信息如下

// Note that it is safe to call connect() multiple times on DGRAM Unix domain sockets, so this

// function is used to reconnect to logd without requiring a new socket.

static void LogdConnect(int sock) {

sockaddr_un un = {};

un.sun_family = AF_UNIX;

strcpy(un.sun_path, "/dev/socket/logdw");

TEMP_FAILURE_RETRY(connect(sock, reinterpret_cast(&un), sizeof(sockaddr_un)));

}

2.2.3.2 logd中的log保存过程

具体代码路径如/XXX/system/logging/logd/main.cpp,从文件的main函数中可以看到,logd执行过程中创建了LogBuffer,LogReader,LogListener和CommandListener四个对象,上文有详细介绍,本节暂且不予解释,详情见2.3.1.2节内容。

图片

接下来创建LogListener的对象,开启一个线程“logd.writer”监听数据,具体过程见下图。

图片

HandleData()

-->logbuf_->Log

新建一个LogBufferElement对象,实现log的保存.

2.2.3.3 logcat获取logd日志

/XXX/system/logging/logcat/logcat.cpp

int main(int argc, char** argv) {

Logcat logcat;

return logcat.Run(argc, argv);

}

具体的logcat命令参数解析在Run函数中执行。

图片

图片

android_logger_list_read接下来的调用过程如下:

android_logger_list_read

-->LogdRead //打开logdr,并通过socket获取log

-->logdOpen

图片

logd的main函数中有开启LogReader监听

// LogReader listens on /dev/socket/logdr. When a client

// connects, log entries in the LogBuffer are written to the client.

LogReader* reader = new LogReader(log_buffer, &reader_list);

if (reader->startListener()) {

return EXIT_FAILURE;

}

LogReader继承自SocketListener,如果socket监听到数据,则执行onDataAvailable函数进行处理。

图片

图片

图片

最后加入read_list_中:

图片

最终通过ProcessBuffer输出日志内容,打印log_msg日志到界面或者fd文件中。具体内容包括:处理日志buffer内容、回滚打印日志内容等。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    3853

    浏览量

    125667
  • 代码
    +关注

    关注

    30

    文章

    4557

    浏览量

    66834
  • 日志
    +关注

    关注

    0

    文章

    126

    浏览量

    10526
收藏 人收藏

    评论

    相关推荐

    Harmony的HiLog打印日志过程分享

    Harmony 提供了 HiLog 系统,让应用/服务可以按照 OS 指定类型、指定等级、指定格式输出内容,帮助开发者了解应用/服务的运行状态日志,更好地调试程序。输出日志的接口由 HiLog 类
    发表于 05-27 14:45

    Android交互视觉设计

    Android交互视觉设计规范由Android UI组完成,其中涵盖了Android交互和视觉两个部分设计规范。
    发表于 09-15 10:25 0次下载

    对于大规模系统日志日志模式提炼算法的优化

    LARGE框架是部署在中国科学院超级计算环境中的日志分析系统,通过日志收集、集中分析、结果反馈等步骤对环境中的各种日志文件进行监控和分析。在对环境中系统日志的监控
    发表于 11-21 14:54 7次下载
    对于大规模系统<b class='flag-5'>日志</b>的<b class='flag-5'>日志</b>模式提炼算法的优化

    Android系统的日志模式选择机制

    在写磁盘的过程中如果意外掉电或系统崩溃很有可能导致文件系统中用户数据和元数据不一致,现有文件系统主要采取写前日志或写时拷贝等一致性技术来解决该问题,但均没有考虑目录对可靠性需求的差异性。针对现有
    发表于 01-03 14:46 0次下载
    <b class='flag-5'>Android</b>系统的<b class='flag-5'>日志</b>模式选择机制

    域格9x07模块调试、日志抓取方法

    异常可抓取特定日志。相关模块的问题及抓取判断方法已简略列出,具体如下。抓取AT交互日志的问题模块注册不上网或者其他AT异常先提供AT交互日志
    的头像 发表于 08-04 16:14 574次阅读
    域格9x07模块调试、<b class='flag-5'>日志</b>抓取方法

    域格9x07模块调试、日志抓取方法

    异常可抓取特定日志。相关模块的问题及抓取判断方法已简略列出,具体如下。抓取AT交互日志的问题模块注册不上网或者其他AT异常先提供AT交互日志
    的头像 发表于 08-04 16:15 3130次阅读

    工业智能网关日志有哪些?如何输出和导出网关日志查看呢?

    日志主要看网关与平台交互情况,判断平台数据是否正常,通道是否正常系统日志主要用于判断网站和系统的异常如何输出和导出工业智能网关的日志呢?1、采集日志
    的头像 发表于 10-26 17:33 457次阅读
    工业智能网关<b class='flag-5'>日志</b>有哪些?如何输出和导出网关<b class='flag-5'>日志</b>查看呢?

    Android异常日志快速定位分析小技巧

    Android异常日志快速定位分析小技巧
    的头像 发表于 08-09 10:06 1122次阅读
    <b class='flag-5'>Android</b>异常<b class='flag-5'>日志</b>快速定位分析小技巧

    日志设计开发过程中的常见问题

    日志是系统中熵增最快的一个模块,它承载了业务野蛮生长过程中的所有副产品。本文介绍了一个日志治理案例,围绕降本和提效两大主题,取得一定成效,分享给所有渴望造物乐趣的同学。
    的头像 发表于 10-19 17:01 276次阅读
    <b class='flag-5'>日志</b>设计开发<b class='flag-5'>过程</b>中的常见问题

    Android开发中的日志接口介绍

    、LOG_ID_RADIO、LOG_ID_EVENTS、LOG_ID_SYSTEM、 LOG_ID_CRASH。 1.1.1 日志缓冲区简介 Android日志记录系统守护进程logd
    的头像 发表于 11-23 16:27 443次阅读
    <b class='flag-5'>Android</b>开发中的<b class='flag-5'>日志</b>接口介绍

    logd守护进程整体设计架构

    2.1 整体设计架构 2.1.1 logd架构设计图 架构设计图内容简介如下: logd启动过程还存在其他内容,比如LogStatistics :是日志统计模块,默认开启统计数据较少,
    的头像 发表于 11-23 16:31 222次阅读
    <b class='flag-5'>logd</b>守护进程整体设计架构

    logd的启动过程和内容

    logd作为native service,系统启动过程通过读取rc文件来启动,相关的属性定义在如下logd.rc文件中。 2.2.1 logd启动
    的头像 发表于 11-23 16:54 373次阅读
    <b class='flag-5'>logd</b>的启动<b class='flag-5'>过程</b>和内容

    kernel日志写入logd介绍

    kernel日志写入logd介绍 通过logcat命令获取kernel日志比较特殊,故作为一个例子进行梳理。 2.3.1 整体流程 2.3.2 命令打印kernel日志 通过logca
    的头像 发表于 11-23 17:11 265次阅读
    kernel<b class='flag-5'>日志</b>写入<b class='flag-5'>logd</b>介绍

    logcat命令抓取日志方法

    命令抓取日志 logcat -b main -b system -b crash -r 1024 -n 5 -f android.log -v threadtime -b:加载可供查看的缓冲区的日志
    的头像 发表于 11-23 17:31 546次阅读
    logcat命令抓取<b class='flag-5'>日志</b>方法

    Android开发中如何解决典型场景缺通用日志的问题

    下面针对一些典型场景缺通用日志android/kernel)的问题,一一列举如下,希望可以让大家关注到缺日志的真实原因。如下问题也提醒各位工程师:谨慎添加日志,不要随意添加,否则即容
    的头像 发表于 11-23 17:39 371次阅读
    <b class='flag-5'>Android</b>开发中如何解决典型场景缺通用<b class='flag-5'>日志</b>的问题