本文介紹如何在 Android 用戶端中使用日誌診斷服務。日誌診斷在控制台下發任務時支援訊息推送和資料同步雙通道。
進行 Android 用戶端診斷的步驟如下:
前置條件
您已接入移動分析組件,且日誌上報功能正常。參見 接入移動分析到 Android 用戶端 瞭解接入步驟。
您已接入訊息推送或資料同步組件。
如果使用訊息推送通道,參見 快速開始接入訊息推送到 Android 用戶端 瞭解接入步驟。
如果使用資料同步通道,參見 接入 Android接入資料同步到 Android 用戶端 瞭解接入步驟。
初始化診斷服務
診斷服務支援使用資料同步或訊息推送通道拉取診斷記錄,兩種通道的初始方式不同。
使用訊息推送通道
使用訊息推送通道時,您需要在 App 啟動後完成以下操作:
初始化。初始化推送服務,建立用戶端和Alibaba Cloud Mobile Push網關之間的長串連,這個長串連由推送 SDK 維護,即自建通道。初始化推送 SDK
綁定使用者識別碼。此使用者識別碼 由開發人員自訂,既可以是真實使用者系統的使用者標識,也可以是能和每個使用者形成映射關係的其他參數,例如帳號、手機號等。上報使用者識別碼
使用資料同步通道
使用資料同步通道時,您需要在 App 啟動後調用以下方法,完成通道初始化。
使用者維度觸發診斷任務
// 設定 userId MPLogger.setUserId(String userId); // 初始化 Sync 通道,必須先設定 userId,否則會初始化失敗 MPDiagnose.initSyncChannel(Context context);裝置維度觸發診斷任務
說明裝置維度觸發診斷任務僅在 10.2.3.73 及以上基準版本中提供支援。
// 設定 userId MPLogger.setUserId(String userId); // 初始化 Sync 通道,必須先設定 userId,否則會初始化失敗 MPDiagnose.initSyncDeviceChannel(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,當該目錄無法寫入時,日誌將寫入 release 包的目錄。重要當 targetSdkVersion 大於等於 30 且 手機系統大於等於 11 時,存放目錄為:
/storage/emulated/0/Android/data/com.mpaas.demo/cache/[PackageName]/applog/。release 包:
/data/data/[PackageName]/files/applog。
自訂診斷記錄儲存參數
預設本地日誌儲存會保留 7 天內的資料,檔案上限 15 MB,超過後按照檔案總數的四分之一進行清理。
需在 manifest 配置 <meta-data>。
//記錄檔儲存上限,單位MB
<meta-data android:name="category_applog_max_size" android:value="15" />
//日誌儲存天數,單位天
<meta-data android:name="category_applog_expires_time" android:value="7" />自訂診斷記錄儲存參數,僅在 10.2.3.73 及以上基準版本中提供支援。
在控制台拉取日誌
您可以在控制台拉取使用 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 則表示上傳成功。