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

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

3天内不再提示

Android开发中的日志接口介绍

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

1、日志接口

日志接口内容,共分为java层、native层、kernel层等。下面就对每个层级的内容分别进行介绍。

1.1 java层调用接口

图片

日志级别分别为VERBOSE、DEBUG、INFO、WARN、ERROR、ASSERT,日志级别依次提升。默认定义了5个buffer缓冲区,分别是main、radio、events、system、crash,对应的ID信息分别为LOG_ID_MAIN、LOG_ID_RADIO、LOG_ID_EVENTS、LOG_ID_SYSTEM、 LOG_ID_CRASH。

图片

1.1.1 日志缓冲区简介

Android日志记录系统守护进程logd维护的一组结构化环形缓冲区,这组可用的缓冲区是固定的,且由系统定义。也可以通过logcat 命令查看如下缓冲区。

radio: 查看包含无线装置/电话相关消息的缓冲区,可以调用android.telephony.Rlog打印日志。

events: 查看经过解译的二进制系统时间缓冲区信息,类型为events的日志是用来诊断系统问题的。在应用框架提供了android.util.EventLog接口通过liblog动态库往日志驱动程序中写入日志,运行时库提供了宏LOG_EVENT_INT、LOG_EVENT_LONG、LOG_EVENT_FLOAT、LOG_EVENT_STRING用来写入events类型日志。

main: 查看主日志缓冲区信息,main日志缓冲区是应用程序唯一可用的日志缓冲区,在应用框架中提供了android.util.Log接口通过liblog动态库往日志驱动程序中写入日志,运行时库提供了LOGV、LOGD、LOGI、LOGW、LOGE等宏用来写入main类型的日志。

system: 查看系统缓冲区类型为system的日志,在应用框架提供了android.util.SLog接口通过liblog动态库往日志驱动程序中写入日志,运行时库提供了SLOGV、SLOGD、SLOGI、SLOGW、SLOGE等宏用来写入system类型的日志。

crash: 查看崩溃日志缓冲区的日志信息。

1.1.2 命令查看缓冲区日志信息

ogcat -b + 参数查看对应缓冲区内容,具体见如下内容。

all :查看所有缓冲区日志

default :查看main、system、crash三个缓冲区日志信息

比如:logcat -b main用来查看main缓冲区信息;logcat -b main,system用来查看main和system缓冲区信息;logcat -b all 查看所有缓冲区信息。

1.2 native层接口调用

原生系统日志接口封装在liblog.so库中,供native层代码调用。最终通过socket的通信方式将日志写入logd的buffer中。具体调用过程需要引入liblog动态库,然后才能调用如下native层的日志接口__android_log_print,很多内容都封装成ALOGX的接口,具体内容可参考如下所示:

#define ALOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, VA_ARGS )

#define ALOGD(...) __android_log_print(ANDROID_LOG_DEBUG , LOG_TAG, VA_ARGS )

#define ALOGI(...) __android_log_print(ANDROID_LOG_INFO , LOG_TAG, VA_ARGS )

#define ALOGW(...) __android_log_print(ANDROID_LOG_WARN , LOG_TAG, VA_ARGS )

#define ALOGE(...) __android_log_print(ANDROID_LOG_ERROR , LOG_TAG, VA_ARGS )

1.3 kernel层调用接口

经常使用的接口是printk,具体用法如下:

printk(KERN_INFO "n"); //KERN_INFO为日志级别,"n"则为日志信息。

日志级别信息如下:

kernel日志级别分别是:KERN_EMERG,KERN_ALERT,KERN_CRIT,KERN_ERR,KERN_WARNING,KERN_NOTICE,KERN_INFO,KERN_DEBUG

原生代码kern_levels.h中定义如下

#define KERN_EMERGKERN_SOH "0"/* system is unusable */

#define KERN_ALERTKERN_SOH "1"/* action must be taken immediately */

#define KERN_CRITKERN_SOH "2"/* critical conditions */

#define KERN_ERRKERN_SOH "3"/* error conditions */

#define KERN_WARNINGKERN_SOH "4"/* warning conditions */

#define KERN_NOTICEKERN_SOH "5"/* normal but significant condition */

#define KERN_INFOKERN_SOH "6"/* informational */

#define KERN_DEBUGKERN_SOH "7"/* debug-level messages */

日志输出到/proc/kmsg节点,用户可以通过cat节点信息获取kernel日志信息。

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

    关注

    12

    文章

    3935

    浏览量

    127352
  • 接口
    +关注

    关注

    33

    文章

    8580

    浏览量

    151031
  • JAVA
    +关注

    关注

    19

    文章

    2966

    浏览量

    104704
收藏 人收藏

    评论

    相关推荐

    Android系统与应用开发内容介绍

    是对ITelephony接口和ISms接口以及AIDL在Android程序开发应 用。e.使用BroadcastReceiver实现开机
    发表于 07-13 14:03

    Android系统开发之蓝牙开发案例分析

    主题:Android系统开发之蓝牙设备访问威廉希尔官方网站 要点分析及经典案例课程内容:本专题围绕Android蓝牙威廉希尔官方网站 及设备访问要点进行介绍,为您解决
    发表于 07-24 16:32

    Android Studio应用开发简介

    详细的开发过程请参考用户手册《Android Studio应用开发简介》。在此手册,详细介绍Andr
    发表于 10-20 11:27

    android框架与应用开发介绍

    android框架与应用开发介绍
    发表于 10-24 09:35 7次下载
    <b class='flag-5'>android</b>框架与应用<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>模式选择机制

    AndroidLog相关介绍

    本文档内容介绍了基于AndroidLog相关介绍及源代码,供参考
    发表于 03-15 11:03 4次下载

    Android Parcelable接口使用

    Android开发,我们会遇到各种各样情况,比如如何将对象保存在本地磁盘或网络上传输等。其实,实现序列化的方式有两种方式,分别是实现Serializable接口和实现Parcela
    发表于 04-03 10:36 2次下载

    fireflyCORE-3399PRO主板JD4--Android开发

    Android开发 ADB 使用 前言 adb,全称 Android Debug Bridge,是 Android 的命令行调试工具,可以完成多种功能,如跟踪系统
    的头像 发表于 12-17 16:30 1679次阅读

    Android开发模式详细介绍

    。在本章,您将了解Android Studio、如何获取Android开发中使用的独立SDK工具、各种Android模拟器和版本控制系统。
    发表于 03-03 08:00 0次下载
    <b class='flag-5'>Android</b>的<b class='flag-5'>开发</b>模式详细<b class='flag-5'>介绍</b>

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

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

    基于Rust的Log日志介绍

    Rust是一门系统级编程语言,因其安全性、高性能和并发性而备受欢迎。在Rust应用程序日志记录是一项非常重要的任务,因为它可以帮助开发人员了解应用程序的运行情况并解决问题。Rust的Log库提供
    的头像 发表于 09-19 14:49 3477次阅读

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

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

    Android日志与logd交互过程

    2.2.3 Android日志与logd交互过程 2.2.3.1 Android日志传递给logd Android app层或framewo
    的头像 发表于 11-23 17:06 929次阅读
    <b class='flag-5'>Android</b><b class='flag-5'>日志</b>与logd交互过程

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

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

    日志篇:模组日志总体介绍

    ​今天我们学习合宙模组日志总体介绍,以下进入正文。 一、本文讨论的边界 本文是对合宙 4G 模组, 以及 4G+GNSS 模组的日志功能的总体介绍。通过
    的头像 发表于 10-24 07:16 183次阅读
    <b class='flag-5'>日志</b>篇:模组<b class='flag-5'>日志</b>总体<b class='flag-5'>介绍</b>