日誌服務功能主要分爲兩大模塊:logcat日誌和埋點日誌。
日誌類型 |
定義 |
特點 |
作用 |
logcat日誌 |
每個app通過Log打印的日誌 |
全,但是關鍵信息不明顯 |
用於分析定位現網問題 |
埋點日誌 |
格式化的日誌 |
格式規整/信息突出/可配合管理平臺進行統計 |
1. 供產品運營分析用戶數據 2. 定位現網問題 |
一、需求
整體結構
logcat日誌 生成及上傳場景
時序圖
埋點日誌
難點:
1. 日誌進程管理
在進程中執行的指令: logcat –v time | egrep –i “abcd”
2. 阻塞式讀取日誌進程中的輸出日誌
buffRead = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((line = buffRead.readLine()) != null) {}
這裏緩存採用StringBuffer,它是線程安全的。
3. 日誌輸出到文件及加密過程
每讀一行日誌會拼接到緩存中,當達到一定數量後寫入文件。
也可以是時間輪詢觸發寫入文件。(會有多線程問題)
寫文件採用: FileOutputStream
壓縮及加密: 採用先gZip壓縮,然後再進行異或加密,祕鑰存儲在代碼中可能存在一定的風險。
4. logcat文件上傳
由於單個文件都是小文件,不需要支持斷點續傳,所以只是簡單的通過一個接口請求將文件put到雲端。
5. 埋點日誌存儲及上傳管理
採用單獨的埋點sdk進行管理。