__android_log_write_log_message -- >get_logger_function() -- >__android_log_logd_logger -- >write_to_log -- >LogdWrite 最終寫到 “/dev/socket/logdw”中,此時logd中的LogListener會監測到存在log信息需要寫入,待log保存到" />

精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

    文章

    3923

    瀏覽量

    127130
  • 代碼
    +關注

    關注

    30

    文章

    4744

    瀏覽量

    68345
  • 日志
    +關注

    關注

    0

    文章

    138

    瀏覽量

    10632
收藏 人收藏

    評論

    相關推薦

    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>模式選擇機制

    工業智能網關日志有哪些?如何輸出和導出網關日志查看呢?

    日志主要看網關與平臺交互情況,判斷平臺數據是否正常,通道是否正常系統日志主要用于判斷網站和系統的異常如何輸出和導出工業智能網關的日志呢?1、采集日志
    的頭像 發表于 10-26 17:33 ?716次閱讀
    工業智能網關<b class='flag-5'>日志</b>有哪些?如何輸出和導出網關<b class='flag-5'>日志</b>查看呢?

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

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

    Android校園應用開發過程

    電子發燒友網站提供《Android校園應用開發過程.pdf》資料免費下載
    發表于 10-19 11:36 ?0次下載
    <b class='flag-5'>Android</b>校園應用開發<b class='flag-5'>過程</b>

    日志設計開發過程中的常見問題

    日志是系統中熵增最快的一個模塊,它承載了業務野蠻生長過程中的所有副產品。本文介紹了一個日志治理案例,圍繞降本和提效兩大主題,取得一定成效,分享給所有渴望造物樂趣的同學。
    的頭像 發表于 10-19 17:01 ?535次閱讀
    <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 ?1050次閱讀
    <b class='flag-5'>Android</b>開發中的<b class='flag-5'>日志</b>接口介紹

    logd守護進程整體設計架構

    2.1 整體設計架構 2.1.1 logd架構設計圖 架構設計圖內容簡介如下: logd啟動過程還存在其他內容,比如LogStatistics :是日志統計模塊,默認開啟統計數據較少,
    的頭像 發表于 11-23 16:31 ?532次閱讀
    <b class='flag-5'>logd</b>守護進程整體設計架構

    logd的啟動過程和內容

    logd作為native service,系統啟動過程通過讀取rc文件來啟動,相關的屬性定義在如下logd.rc文件中。 2.2.1 logd啟動
    的頭像 發表于 11-23 16:54 ?800次閱讀
    <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 ?641次閱讀
    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 ?1037次閱讀
    logcat命令抓取<b class='flag-5'>日志</b>方法

    Android開發中如何解決典型場景缺通用日志的問題

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

    奇怪!應用的日志呢??

    1. 問題回顧 問題背景 是在進行中臺應用中間件遷移過程中,發現存在 項目啟動失敗 或者 項目正常啟動 (jsf正常掛載并正常運行,mq正常發送和消費)但是 無任何日志打印 現象。 更奇怪 的是不打
    的頭像 發表于 06-11 10:48 ?293次閱讀
    奇怪!應用的<b class='flag-5'>日志</b>呢??

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

    ?今天我們學習合宙模組日志總體介紹,以下進入正文。 一、本文討論的邊界 本文是對合宙 4G 模組, 以及 4G+GNSS 模組的日志功能的總體介紹。通過日志,可以對研發過程中,以及模組
    的頭像 發表于 10-24 07:16 ?146次閱讀
    <b class='flag-5'>日志</b>篇:模組<b class='flag-5'>日志</b>總體介紹