本文介紹如何在 Android 用戶端中使用日誌診斷服務。日誌診斷在控制台下發任務時支援訊息推送和資料同步雙通道。
進行 Android 用戶端診斷的步驟如下:
前置條件
您已接入移動分析組件,且日誌上報功能正常。參見 接入移動分析到 Android 用戶端 瞭解接入步驟。
您已接入訊息推送或資料同步組件。
如果使用訊息推送通道,參見 接入訊息推送到 Android 用戶端 瞭解接入步驟。
如果使用資料同步通道,參見 接入資料同步到 Android 用戶端 瞭解接入步驟。
初始化診斷服務
診斷服務支援使用資料同步或訊息推送通道拉取診斷記錄,兩種通道的初始方式不同。
使用訊息推送通道
使用訊息推送通道時,您需要在 App 啟動後完成以下操作:
使用資料同步通道
使用資料同步通道時,您需要在 App 啟動後調用以下方法,完成通道初始化。
// 設定 userId
MPLogger.setUserId(String userId);
// 初始化 Sync 通道,必須先設定 userId,否則會初始化失敗
MPDiagnose.initSyncChannel(Context context);
寫入診斷記錄
用戶端收到下發的診斷任務時,只有使用 mPaaS 的日誌工具 MPLogger 寫入的日誌才會被上傳,因此推薦您使用 MPLogger 代替 android.util.Log
寫日誌。MPLogger 提供和原生 Log 類似的記錄層級方法:
void verbose(String tag, String msg);
void debug(String tag, String msg);
void info(String tag, String msg);
void warn(String tag, String msg);
void warn(String tag, Throwable t);
void warn(String tag, String msg, Throwable tr);
void error(String tag, String msg);
void error(String tag, Throwable t);
void error(String tag, String msg, Throwable t);
void print(String tag, String msg);
void print(String tag, Throwable t);
在通過 MPLogger 寫入的日誌中,debug 包會在 logcat 中顯示;release 包不會在 logcat 中顯示。診斷記錄在裝置上的儲存目錄為:
debug 包:
/sdcard/[PackageName]/applog
,當該目錄無法寫入時(例如應用 targetSdkVersion 大於等於 30),日誌將寫入 release 包的目錄。release 包:
/data/data/[PackageName]/files/applog
在控制台拉取日誌
您可以在控制台拉取使用 mPaaS 的日誌工具列印的日誌,從而快速便捷地分析 App 在指定機型或使用者上出現的崩潰或異常問題。
步驟 1:建立日誌拉取任務
進入 mPaaS 控制台,選擇目標應用。
在左側導覽列中,點擊 移動分析 > 日誌管理。
在 拉取即時日誌 標籤頁中,點擊 添加 按鈕。
填寫任務資訊。其中,使用者識別碼 為您的應用登入系統中使用者的標識。通過
MPLogger.setUserId(String userId)
或訊息推送上報使用者識別碼 的方法設定。點擊 確認 按鈕,完成日誌拉取任務建立。
步驟 2:觸發日誌拉取任務
在日誌拉取工作清單中,找到剛剛建立的任務,選擇 觸發通道,然後點擊 操作 列的 觸發。
稍等片刻重新整理頁面,若任務狀態為:
任務處理完成:點擊 查看 按鈕即可下載診斷記錄。
調用 Push/Sync 服務成功:表示已下發上傳診斷記錄的訊息,但用戶端還未收到或收到但未上傳日誌。 針對此情況,請確認您的 App 進程在系統中仍然存在;如果不存在請重啟 App。如果重啟後任務狀態仍未變化,請參考下文進行初步排查。
問題排查
如果出現無法拉取到日誌的問題,請根據所使用的診斷記錄下發通道,按照對應的步驟進行排查。
使用訊息推送通道
排查步驟如下:
進入 mPaaS 控制台 > 訊息推送 頁面,根據 userId 推送一條普通的訊息到您的 App,確認訊息推送通道暢通。
在訊息推送通道暢通的情況下,先清空 logcat 日誌,切換到 push 進程,然後在控制台診斷任務中再次點擊 觸發 按鈕,觀察 logcat 日誌。
過濾
mPush14
,觀察是否收到診斷訊息。若未收到,請確認推送通道是否已中斷連線。確認收到診斷訊息後,可尋找是否有以下日誌,確認診斷訊息是否被轉寄到
MonitorService
。 若報錯找不到ClientMonitorService
,請使用 mPaaS 外掛程式更新 SDK:10.1.32 基準請升級到 10.1.68,並更新群組件到最新版本。
10.1.60 或 10.1.68 基準請更新群組件到最新版本。
確認
MonitorService
啟動後,過濾AlipayLogUploader
,查看本地是否存在診斷記錄。如果出現以下日誌,說明本地存在診斷記錄可以上傳。如果出現以下日誌,說明不存在診斷記錄。
若不存在診斷記錄,請檢查以下專案:
控制台建立的拉取即時日誌任務,選取的時間段不能少於 1 小時;在選取的時間段內 App 須運行且輸出診斷記錄。
App 聲明並動態申請了以下許可權:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
確認本地存在診斷記錄後,過濾
HttpUpload
,查看日誌上傳是否成功,若responseCode
為 200 則表示上傳成功。
使用資料同步通道
排查步驟如下:
清空 logcat 日誌,切換到主進程,初始化同步通道後,過濾
isConnected
,觀察同步通道建連是否成功。在 mPaaS 控制台診斷任務中再次點擊 觸發 按鈕,過濾
MPDiagnose
,觀察是否收到診斷訊息,以及是否啟動了MonitorService
。若未收到訊息,請確認設定的 userId 和診斷任務中填寫的 userId 是否一致;若報錯找不到
ClientMonitorService
,請使用 mPaaS 外掛程式更新 SDK:10.1.32 基準請升級到 10.1.68,並更新群組件到最新版本。
10.1.60 或 10.1.68 基準請更新群組件到最新版本。
確認
MonitorService
啟動後,切換到 push 進程,過濾AlipayLogUploader
,查看本地是否存在診斷記錄。如果出現以下日誌,說明本地存在診斷記錄可以上傳。如果出現以下日誌,說明不存在診斷記錄。請檢查以下專案:
控制台建立的拉取即時日誌任務,選取的時間段不能少於 1 小時;在選取的時間段內 App 須運行且輸出診斷記錄。
App 聲明並動態申請了以下許可權:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
確認本地存在診斷記錄後,過濾
HttpUpload
,查看日誌上傳是否成功,若responseCode
為 200 則表示上傳成功。