0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Android開發(fā)中的日志接口介紹

麥辣雞腿堡 ? 來(lái)源:OPPO內(nèi)核工匠 ? 作者:marc ? 2023-11-23 16:27 ? 次閱讀

1、日志接口

日志接口內(nèi)容,共分為java層、native層、kernel層等。下面就對(duì)每個(gè)層級(jí)的內(nèi)容分別進(jìn)行介紹。

1.1 java層調(diào)用接口

圖片

日志級(jí)別分別為VERBOSE、DEBUG、INFO、WARN、ERROR、ASSERT,日志級(jí)別依次提升。默認(rèn)定義了5個(gè)buffer緩沖區(qū),分別是main、radio、events、system、crash,對(duì)應(yīng)的ID信息分別為L(zhǎng)OG_ID_MAIN、LOG_ID_RADIO、LOG_ID_EVENTS、LOG_ID_SYSTEM、 LOG_ID_CRASH。

圖片

1.1.1 日志緩沖區(qū)簡(jiǎn)介

Android日志記錄系統(tǒng)守護(hù)進(jìn)程logd維護(hù)的一組結(jié)構(gòu)化環(huán)形緩沖區(qū),這組可用的緩沖區(qū)是固定的,且由系統(tǒng)定義。也可以通過(guò)logcat 命令查看如下緩沖區(qū)。

radio: 查看包含無(wú)線裝置/電話相關(guān)消息的緩沖區(qū),可以調(diào)用android.telephony.Rlog打印日志。

events: 查看經(jīng)過(guò)解譯的二進(jìn)制系統(tǒng)時(shí)間緩沖區(qū)信息,類型為events的日志是用來(lái)診斷系統(tǒng)問(wèn)題的。在應(yīng)用框架提供了android.util.EventLog接口通過(guò)liblog動(dòng)態(tài)庫(kù)往日志驅(qū)動(dòng)程序中寫入日志,運(yùn)行時(shí)庫(kù)提供了宏LOG_EVENT_INT、LOG_EVENT_LONG、LOG_EVENT_FLOAT、LOG_EVENT_STRING用來(lái)寫入events類型日志。

main: 查看主日志緩沖區(qū)信息,main日志緩沖區(qū)是應(yīng)用程序唯一可用的日志緩沖區(qū),在應(yīng)用框架中提供了android.util.Log接口通過(guò)liblog動(dòng)態(tài)庫(kù)往日志驅(qū)動(dòng)程序中寫入日志,運(yùn)行時(shí)庫(kù)提供了LOGV、LOGD、LOGI、LOGW、LOGE等宏用來(lái)寫入main類型的日志。

system: 查看系統(tǒng)緩沖區(qū)類型為system的日志,在應(yīng)用框架提供了android.util.SLog接口通過(guò)liblog動(dòng)態(tài)庫(kù)往日志驅(qū)動(dòng)程序中寫入日志,運(yùn)行時(shí)庫(kù)提供了SLOGV、SLOGD、SLOGI、SLOGW、SLOGE等宏用來(lái)寫入system類型的日志。

crash: 查看崩潰日志緩沖區(qū)的日志信息。

1.1.2 命令查看緩沖區(qū)日志信息

ogcat -b + 參數(shù)查看對(duì)應(yīng)緩沖區(qū)內(nèi)容,具體見如下內(nèi)容。

all :查看所有緩沖區(qū)日志

default :查看main、system、crash三個(gè)緩沖區(qū)日志信息

比如:logcat -b main用來(lái)查看main緩沖區(qū)信息;logcat -b main,system用來(lái)查看main和system緩沖區(qū)信息;logcat -b all 查看所有緩沖區(qū)信息。

1.2 native層接口調(diào)用

原生系統(tǒng)日志接口封裝在liblog.so庫(kù)中,供native層代碼調(diào)用。最終通過(guò)socket的通信方式將日志寫入logd的buffer中。具體調(diào)用過(guò)程需要引入liblog動(dòng)態(tài)庫(kù),然后才能調(diào)用如下native層的日志接口__android_log_print,很多內(nèi)容都封裝成ALOGX的接口,具體內(nèi)容可參考如下所示:

#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層調(diào)用接口

經(jīng)常使用的接口是printk,具體用法如下:

printk(KERN_INFO "n"); //KERN_INFO為日志級(jí)別,"n"則為日志信息。

日志級(jí)別信息如下:

kernel日志級(jí)別分別是: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節(jié)點(diǎn),用戶可以通過(guò)cat節(jié)點(diǎn)信息獲取kernel日志信息。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3917

    瀏覽量

    127037
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8447

    瀏覽量

    150724
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2952

    瀏覽量

    104485
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Android系統(tǒng)與應(yīng)用開發(fā)內(nèi)容介紹

    是對(duì)ITelephony接口和ISms接口以及AIDL在Android程序開發(fā)應(yīng) 用。e.使用BroadcastReceiver實(shí)現(xiàn)開機(jī)
    發(fā)表于 07-13 14:03

    Android系統(tǒng)開發(fā)之藍(lán)牙開發(fā)案例分析

    主題:Android系統(tǒng)開發(fā)之藍(lán)牙設(shè)備訪問(wèn)技術(shù)要點(diǎn)分析及經(jīng)典案例課程內(nèi)容:本專題圍繞Android藍(lán)牙技術(shù)及設(shè)備訪問(wèn)要點(diǎn)進(jìn)行介紹,為您解決
    發(fā)表于 07-24 16:32

    Android Studio應(yīng)用開發(fā)簡(jiǎn)介

    詳細(xì)的開發(fā)過(guò)程請(qǐng)參考用戶手冊(cè)《Android Studio應(yīng)用開發(fā)簡(jiǎn)介》。在此手冊(cè),詳細(xì)介紹Andr
    發(fā)表于 10-20 11:27

    android框架與應(yīng)用開發(fā)介紹

    android框架與應(yīng)用開發(fā)介紹
    發(fā)表于 10-24 09:35 ?7次下載
    <b class='flag-5'>android</b>框架與應(yīng)用<b class='flag-5'>開發(fā)</b><b class='flag-5'>介紹</b>

    Android系統(tǒng)的日志模式選擇機(jī)制

    在寫磁盤的過(guò)程如果意外掉電或系統(tǒng)崩潰很有可能導(dǎo)致文件系統(tǒng)中用戶數(shù)據(jù)和元數(shù)據(jù)不一致,現(xiàn)有文件系統(tǒng)主要采取寫前日志或?qū)憰r(shí)拷貝等一致性技術(shù)來(lái)解決該問(wèn)題,但均沒有考慮目錄對(duì)可靠性需求的差異性。針對(duì)現(xiàn)有
    發(fā)表于 01-03 14:46 ?0次下載
    <b class='flag-5'>Android</b>系統(tǒng)的<b class='flag-5'>日志</b>模式選擇機(jī)制

    AndroidLog相關(guān)介紹

    本文檔內(nèi)容介紹了基于AndroidLog相關(guān)介紹及源代碼,供參考
    發(fā)表于 03-15 11:03 ?4次下載

    Android Parcelable接口使用

    Android開發(fā),我們會(huì)遇到各種各樣情況,比如如何將對(duì)象保存在本地磁盤或網(wǎng)絡(luò)上傳輸?shù)取F鋵?shí),實(shí)現(xiàn)序列化的方式有兩種方式,分別是實(shí)現(xiàn)Serializable接口和實(shí)現(xiàn)Parcela
    發(fā)表于 04-03 10:36 ?2次下載

    fireflyCORE-3399PRO主板JD4--Android開發(fā)

    Android開發(fā) ADB 使用 前言 adb,全稱 Android Debug Bridge,是 Android 的命令行調(diào)試工具,可以完成多種功能,如跟蹤系統(tǒng)
    的頭像 發(fā)表于 12-17 16:30 ?1639次閱讀

    Android開發(fā)模式詳細(xì)介紹

    。在本章,您將了解Android Studio、如何獲取Android開發(fā)中使用的獨(dú)立SDK工具、各種Android模擬器和版本控制系統(tǒng)。
    發(fā)表于 03-03 08:00 ?0次下載
    <b class='flag-5'>Android</b>的<b class='flag-5'>開發(fā)</b>模式詳細(xì)<b class='flag-5'>介紹</b>

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

    Android異常日志快速定位分析小技巧
    的頭像 發(fā)表于 08-09 10:06 ?2624次閱讀
    <b class='flag-5'>Android</b>異常<b class='flag-5'>日志</b>快速定位分析小技巧

    基于Rust的Log日志庫(kù)介紹

    Rust是一門系統(tǒng)級(jí)編程語(yǔ)言,因其安全性、高性能和并發(fā)性而備受歡迎。在Rust應(yīng)用程序,日志記錄是一項(xiàng)非常重要的任務(wù),因?yàn)樗梢詭椭?b class='flag-5'>開發(fā)人員了解應(yīng)用程序的運(yùn)行情況并解決問(wèn)題。Rust的Log庫(kù)提供
    的頭像 發(fā)表于 09-19 14:49 ?3346次閱讀

    日志設(shè)計(jì)開發(fā)過(guò)程中的常見問(wèn)題

    日志是系統(tǒng)熵增最快的一個(gè)模塊,它承載了業(yè)務(wù)野蠻生長(zhǎng)過(guò)程的所有副產(chǎn)品。本文介紹了一個(gè)日志治理案例,圍繞降本和提效兩大主題,取得一定成效,分
    的頭像 發(fā)表于 10-19 17:01 ?526次閱讀
    <b class='flag-5'>日志</b>設(shè)計(jì)<b class='flag-5'>開發(fā)過(guò)程中</b>的常見問(wèn)題

    Android日志與logd交互過(guò)程

    2.2.3 Android日志與logd交互過(guò)程 2.2.3.1 Android日志傳遞給logd Android app層或framewo
    的頭像 發(fā)表于 11-23 17:06 ?845次閱讀
    <b class='flag-5'>Android</b><b class='flag-5'>日志</b>與logd交互過(guò)程

    Android開發(fā)如何解決典型場(chǎng)景缺通用日志的問(wèn)題

    下面針對(duì)一些典型場(chǎng)景缺通用日志android/kernel)的問(wèn)題,一一列舉如下,希望可以讓大家關(guān)注到缺日志的真實(shí)原因。如下問(wèn)題也提醒各位工程師:謹(jǐn)慎添加日志,不要隨意添加,否則即容
    的頭像 發(fā)表于 11-23 17:39 ?852次閱讀
    <b class='flag-5'>Android</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>中</b>如何解決典型場(chǎng)景缺通用<b class='flag-5'>日志</b>的問(wèn)題

    日志篇:模組日志總體介紹

    ?今天我們學(xué)習(xí)合宙模組日志總體介紹,以下進(jìn)入正文。 一、本文討論的邊界 本文是對(duì)合宙 4G 模組, 以及 4G+GNSS 模組的日志功能的總體介紹。通過(guò)
    的頭像 發(fā)表于 10-24 07:16 ?121次閱讀
    <b class='flag-5'>日志</b>篇:模組<b class='flag-5'>日志</b>總體<b class='flag-5'>介紹</b>