Android CRASH ANR 日志收集
需求:如圖

收集實現(xiàn)方式

-
通過現(xiàn)成的bugly收集 在bugly上報crash 或anr之前先將錯誤信息寫入本地磁盤
/** * Crash處理. * * @param crashType 錯誤類型:CRASHTYPE_JAVA,CRASHTYPE_NATIVE,CRASHTYPE_U3D ,CRASHTYPE_ANR * @param errorType 錯誤的類型名 * @param errorMessage 錯誤的消息 * @param errorStack 錯誤的堆棧 * @return 返回額外的自定義信息上報 */ @Override public Map<String, String> onCrashHandleStart(int crashType, String errorType, String errorMessage, String errorStack) { LinkedHashMap<String, String> map = new LinkedHashMap<String, String>(); map.put("設(shè)備序列號","test"); Log.i("bugly_test",crashType+errorType+errorMessage); return map; }
不過目前上述方案都存在一些問題
-
第一種方案 只有系統(tǒng)app才有權(quán)限訪問該文件夾。查看了sunmi sendcrash的實現(xiàn)(這個是系統(tǒng)應用 所以能讀取到/data/system/dropbox)。
-
監(jiān)聽到日志被添加的廣播->讀取/data/system/dropbox內(nèi)容->寫入外部存儲/sdcard/crash.log文件
所以說summi上裝了sendcrash應用 美易點就在crash.log中能讀取到需要收集的信息
-
-
第二種方案:系統(tǒng)崩潰都能獲取到 但是一個很尷尬的地方Android6.0后的設(shè)備無法上傳ANR信息
還是由于系統(tǒng)權(quán)限的限制導致bugly 無法查看trace.txt文件引起。不過這部分信息非常關(guān)鍵 分析線上的一些特別異常問題就需要這部份信息.
上報方式
- 將日志寫入文件上報中控點 擊多次一條條上報 不過要做好一些限制和考慮一些會存在的問題
文件的大小是否要做下限制(太大了不行)
同一條記錄是否允許多次上報
多條上報時一條失敗是否都終止(避免對服務(wù)器造成壓力)
這樣一條條上報其實對查詢?nèi)罩静挥押?后臺日志會多很多zip日志包
界面
- 對日志的條數(shù)和時間做下限制。
建議
關(guān)于收集 建議是設(shè)備廠商給我們開放一下讀取權(quán)限 目前只能在商米設(shè)備上實現(xiàn)收集需要的全部信息
-
關(guān)于上報 根據(jù)上文上報方式里的問題
建議:其實上面的上報日志一些問題不管在美易點還是全能POS都有自己的解決方案和實現(xiàn)方式
1.上報日志的時候講這些日志添加到應用日志中2.美易點本身有上報到KB的邏輯 這個查起來也很方便
3.如果還是這個方案 建議和中控其他日志分開不然后面查詢過濾比較麻煩
關(guān)于界面 限制日志條數(shù)和時間來提升交互效果及體驗(太多影響內(nèi)存)