android 日誌方案研究

android Log原理

對於android工程師,可能對於Log底層jni部分細節不需要具體瞭解,用一張圖來了解其實現流程:

Android_Log

這裏涉及到三個進程:

APP進程:  調用Log的接口打日誌,最終通過soctket通信發送給Logd進程

Logd進程:有一個緩衝區用於存儲日誌(環形緩衝區,當滿時會沖掉舊的日誌)

Logcat進程:可以在adb shell中創建(可以創建多個),查看緩衝區中日誌的進程(Android Studio的logcat也是一個Logcat進程)。


環形緩衝區是一個邏輯上的循環隊列,寫者可以往裏面寫東西,而一旦有內容會通知等待隊列裏的讀者們來讀取內容,否則等待隊列列處於阻塞狀態。 這就意味Logcat進程讀取也是阻塞形式的。


基於緩存的日誌方案

對於普通應用:實現一套自己的Log,將每次打的日誌緩存起來。

對於系統應用:在應用中開啓一起Logcat進程,不斷的讀取Logd進程中的日誌到緩存中,當日質量達到一定的閾值後再刷如文件。這種方案可以蒐集到所有應用的日誌。

缺點:

1. 寫文件 + 加密  會出現cpu峯值

2. 崩潰或者進程意外退出 緩存中的日誌可能無法刷到文件中,關鍵崩潰信息可能丟失。


對於智能設備中專門做一個日誌進程去搜集所有應用的日誌,這種方案其實是簡單可行的。


基於共享內存的方案


基於mmp的方案


參考:

https://blog.csdn.net/tencent_bugly/article/details/53157830

http://ju.outofmemory.cn/entry/224106

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章