1. 程式人生 > >【Android】log系統初識

【Android】log系統初識

本來準備採用寫/dev/log/main的方式進行底層的寫log測試,但是Android6後就沒有/dev/log/main了,根據參考資料來檢視分析, 得到一個大致的概念,Android中由於log量大,為了方便的處理log,採用程序logd來寫log,我們呼叫Log.d()方法寫log的時候,會導致底層通過socket向logd程序寫資料,logd將資料寫到其快取中,當使用logcat去獲取資料的時候,也是通過socket通訊去獲取資料。 Log.d以及Slog的寫log最終會呼叫到底層的方法

52
LIBLOG_ABI_PUBLICintwritev(intfd, conststructiovec *vecs, intcount) 53{ 54inttotal = 0; 5556for ( ; count > 0; count--, vecs++ ) { 57constchar* buf = vecs->iov_base; 58intlen = vecs->iov_len; 5960while (len > 0) { 61intret = write( fd, buf, len ); 62if (ret < 0) { 63if (total == 0) 64total
= -1; 65gotoExit; 66 } 67if (ret == 0) 68gotoExit; 6970total += ret; 71buf += ret; 72len -= ret; 73 } 74 } 75Exit: 76returntotal; 77} 78
本質上還是呼叫的系統write方法,向logd進行寫操作 也就是說,如果給入合適的輸入格式,我們是可以直接通過write操作進行寫log 如: int main(int argc, char* const argv[]) {         int fd = open("/dev/socket/logdw", O_RDWR);         if (fd < 0)                 aerr << "fd < 0" << endl;         else                 aout << "fd = " << fd << endl;         write(fd, "=====00 log write===============", 22); } 直接這樣寫是有問題的,資料格式不對, Unknown:/data/local/tmp # ./wtLog fd < 0 這個測試需要繼續研究 如果要正確的處理,需要再檢視logd的處理方式進行分析 logd啟動後的入口是/system/core/logd/main.cpp中的main方法

logd對log進行處理,讀log是從/dev/socket/logdr來獲取資料 log處理流程 Log.d() -> liblog ---socket--->logd ----socket---->logcat 參考資料 本來準備採用寫/dev/log/main的方式進行底層的寫log測試,但是Android6後就沒有/dev/log/main了,根據參考資料來檢視 Log.d以及Slog的寫log最終會呼叫到底層的方法

52
LIBLOG_ABI_PUBLICintwritev(intfd, conststructiovec *vecs
, intcount) 53{ 54inttotal = 0; 5556for ( ; count > 0; count--, vecs++ ) { 57constchar* buf = vecs->iov_base; 58intlen = vecs->iov_len; 5960while (len > 0) { 61intret = write( fd, buf, len ); 62if (ret < 0) { 63if (total == 0) 64total = -1; 65gotoExit; 66 } 67if (ret == 0) 68gotoExit; 6970total += ret; 71buf += ret; 72len -= ret; 73 } 74 } 75Exit: 76returntotal; 77} 78
本質上還是呼叫的系統write方法,向logd進行寫操作 也就是說,如果給入合適的輸入格式,我們是可以直接通過write操作進行寫log 如: int main(int argc, char* const argv[]) {         int fd = open("/dev/socket/logdw", O_RDWR);         if (fd < 0)                 aerr << "fd < 0" << endl;         else                 aout << "fd = " << fd << endl;         write(fd, "=====00 log write===============", 22); } 直接這樣寫是有問題的,資料格式不對, Unknown:/data/local/tmp # ./wtLog fd < 0 這個測試需要繼續研究 如果要正確的處理,需要再檢視logd的處理方式進行分析 logd啟動後的入口是/system/core/logd/main.cpp中的main方法
logd對log進行處理,讀log是從/dev/socket/logdr來獲取資料 log處理流程 Log.d() -> liblog ---socket--->logd ----socket---->logcat

基於AndroidN的Log機制淺析



本來準備採用寫/dev/log/main的方式進行底層的寫log測試,但是Android6後就沒有/dev/log/main了,根據參考資料來檢視 Log.d以及Slog的寫log最終會呼叫到底層的方法

52
LIBLOG_ABI_PUBLICintwritev(intfd, conststructiovec *vecs, intcount) 53{ 54inttotal = 0; 5556for ( ; count > 0; count--, vecs++ ) { 57constchar* buf = vecs->iov_base; 58intlen = vecs->iov_len; 5960while (len > 0) { 61intret = write( fd, buf, len ); 62if (ret < 0) { 63if (total == 0) 64total = -1; 65gotoExit; 66 } 67if (ret == 0) 68gotoExit; 6970total += ret; 71buf += ret; 72len -= ret; 73 } 74 } 75Exit: 76returntotal; 77} 78
本質上還是呼叫的系統write方法,向logd進行寫操作 也就是說,如果給入合適的輸入格式,我們是可以直接通過write操作進行寫log 如: int main(int argc, char* const argv[]) {         int fd = open("/dev/socket/logdw", O_RDWR);         if (fd < 0)                 aerr << "fd < 0" << endl;         else                 aout << "fd = " << fd << endl;         write(fd, "=====00 log write===============", 22); } 直接這樣寫是有問題的,資料格式不對, Unknown:/data/local/tmp # ./wtLog fd < 0 這個測試需要繼續研究 如果要正確的處理,需要再檢視logd的處理方式進行分析 logd啟動後的入口是/system/core/logd/main.cpp中的main方法
logd對log進行處理,讀log是從/dev/socket/logdr來獲取資料 log處理流程 Log.d() -> liblog ---socket--->logd ----socket---->logcat

相關推薦

Androidlog系統初識

本來準備採用寫/dev/log/main的方式進行底層的寫log測試,但是Android6後就沒有/dev/log/main了,根據參考資料來檢視分析, 得到一個大致的概念,Android中由於log量大,為了方便的處理log,採用程序logd來寫log,我們呼

Android呼叫系統圖庫獲取影象並裁剪,安卓 4.4可用

3.區分Android系統版本,解析uri 若系統版本低於4.4,uri=data.getData()直接可用,4.4及以上要根據uri中的id來查詢檔案路徑,然後自己構造新的uri 下圖為安卓4.4呼叫相簿訪問圖片的路徑,預設返回的字首為content:// ,最後的3A741是圖片id 根據id我們轉

Androidadb抓取不同分類Log(kernel、radio、event、main)和獲取ANR log

Log分類     Android日誌主要分為kernel、radio、event、main這四種log。 Kernel Log     kernel log屬於Linux核心的log ,可以通過讀取/proc/kmsg或者通過串列埠來抓取。     adb 抓取ke

Android系統Android檔案目錄結構

system/app:存放系統軟體 system/data:存放系統軟體的資料 data/app:存放使用者安裝的軟體 data/data:存放使用者軟體的資料 storage/emulated/0:儲存卡 storage/sdcard:虛擬路徑,快捷方式,實際

Android當關閉通知訊息許可權後無法顯示系統Toast的解決方案

前言 不知道大家是否遇到了當你們的App在5.0以上系統中被使用者關閉訊息通知後(其實使用者本身只是想關閉Notification的,猜測),系統的Toast也神奇的無法顯示。當然這個問題並不複雜,有很多種解決方案,我們逐一探討一下,然後來看看到底哪種方式會好

Android 儲存圖片到系統圖庫, 並立即顯示在相簿中

搬運原連結:http://stormzhang.github.io/android/2014/07/24/android-save-image-to-gallery 【正文】 最近有些使用者反映儲存圖片之後在系統圖庫找不到儲存的圖片,遂決定徹底檢視並解決下。 Andro

AndroidAndroid聊天機器人實現

小米 div bottom 曾經 圖靈 .9.png sdn http 歡迎界面 昨天看到一個Android視頻教程講圖靈機器人。那個API接口用起來還是挺方便的,就準備自己動手做一個了。另外自己還使用了高德地圖的API接口用於定位(曾經用過高德的接口,比X度方便) 大

AndroidEclipse自己主動編譯NDK/JNI的三種方法

comm tro mman gnu tex android項目 syn color ng- 【Android】Eclipse自己主動編譯NDK/JNI的三種方法 SkySeraph Sep. 18th 2014 Email:[email protec

androiduses-permission和permission具體解釋

.com 新的 -i weight bsp htm fin article 程序 1.<uses-permission>: 官方描寫敘述: If an application needs access to a feature prote

Android自己定義圓形ImageView(圓形頭像 可指定大小)

代碼實現 err float avi rim war tor pos dsm 近期在仿手Q的UI,這裏面常常要用到的就是圓形頭像,看到 在android中畫圓形圖片的幾種辦法 這篇文章,了解了制作這樣的頭像的原理.只是裏面提供的方法另一個不足的地方就是

Android獲取控件的寬和高

height string -a @override parent popu tle post spa 有時候我們須要在Activity的時候獲取控件的寬和高來做一些操作,以下介紹三種獲取寬和高的方式: 1. onWindowFoc

AndroidgetActionBar()為null的解決方法總結

andro 調用 種類 ref code trac page 沒有 stack 前言 在使用 ActionBar的時候,有時候會爆出空指針異常,這是由於應用沒有獲取到 ActionBar 導致的,而導致應用沒有獲取到 ActionBar 的原因比較多。

AndroidUbuntu 16.04搭建Android開發編譯環境

jdk8 per 參考 prot google官網 markdown ins 由於 log 一. 通用Android環境和工具配置 1. 系統更新升級 sudo apt-get update sudo apt-get upgrade 2. 配置ntlmaps代理上網環境

其他Windows 系統安裝IIS 打開頁面出現空白解決方案

安裝iis win 面板 控制 window 不容易 功能 查看源 打開 部署IIS過程中遇到了一個奇怪的問題,就是怎麽設置打開的頁面都是一篇空白,IIS也沒有任何報錯,翻遍互聯網好不容易找到了解決方法,今天就教給大家,希望大家不要走彎路。此方法Windows xp、7、8

AIX系統錯誤之--磁盤錯誤

scsi 系統 article root into flag wsh digg kaa AIX系統錯誤之--磁盤錯誤 來源:http://blog.csdn.net/yujin2010good/article/details/40075485 系統環境: 操作系統

AndroidAndroid六種布局詳解

spec rec 默認 bottom ron ado 居中 右下角 控制 這篇就對LinearLayout、RelativeLayout、自定義ViewGroup、FrameLayout、TableLayout、AbsoluteLayout六種布局進行詳細的講解。 1

Android實現線程異步小技巧

使用 msg xtend util rri wsh ride 執行 java 方式不止一種,這裏使用的是Timer類,創建一個定時器。我們經常需要獲得移動設備端口的顯示屏信息,但是onCreate()方法執行的時候,OnShow()方法不一定執行了,也就是說,在執行Oncr

Android如何實現Android發送短信

ted param close ase find array 短信 red phone 第一種:調用系統短信接口直接發送短信;主要代碼如下: /** * 直接調用短信接口發短信 * @param phoneNumber * @

windowswindows系統下,在任務管理器的進程選項卡中查看PID/任務管理器怎麽查看PID

分享圖片 圖片 技術 啟動 最大值 成功 9.png mage 選擇列 PID,就是windows上的進程ID,是一個進程的唯一標識值。 那今天啟動JDK跑起來一個項目之後,想要在任務管理器中查看這個JDK所在進程的PID但是看不到。 怎麽解決? 1.我在任務管理

Androidjava.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'JavaBridge'.

ole lang exp blog web ref overflow post exce 一、問題 Java調用JS事件出現 java.lang.RuntimeException: java.lang.Throwable: A WebView method was call