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會監(jiān)測到存在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函數(shù)中可以看到,logd執(zhí)行過程中創(chuàng)建了LogBuffer,LogReader,LogListener和CommandListener四個對象,上文有詳細介紹,本節(jié)暫且不予解釋,詳情見2.3.1.2節(jié)內容。
接下來創(chuàng)建LogListener的對象,開啟一個線程“l(fā)ogd.writer”監(jiān)聽數(shù)據(jù),具體過程見下圖。
HandleData()
-->logbuf_->Log
新建一個LogBufferElement對象,實現(xiàn)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命令參數(shù)解析在Run函數(shù)中執(zhí)行。
android_logger_list_read接下來的調用過程如下:
android_logger_list_read
-->LogdRead //打開logdr,并通過socket獲取log
-->logdOpen
logd的main函數(shù)中有開啟LogReader監(jiān)聽
// 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監(jiān)聽到數(shù)據(jù),則執(zhí)行onDataAvailable函數(shù)進行處理。
最后加入read_list_中:
最終通過ProcessBuffer輸出日志內容,打印log_msg日志到界面或者fd文件中。具體內容包括:處理日志buffer內容、回滾打印日志內容等。
-
Android
+關注
關注
12文章
3974瀏覽量
130485 -
代碼
+關注
關注
30文章
4905瀏覽量
70954 -
日志
+關注
關注
0文章
144瀏覽量
10887
發(fā)布評論請先 登錄
Android交互視覺設計
對于大規(guī)模系統(tǒng)日志的日志模式提煉算法的優(yōu)化

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

工業(yè)智能網(wǎng)關日志有哪些?如何輸出和導出網(wǎng)關日志查看呢?

日志設計開發(fā)過程中的常見問題

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

logd守護進程整體設計架構

kernel日志寫入logd介紹

logcat命令抓取日志方法

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

奇怪!應用的日志呢??

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

評論