本文介紹如何在 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 控制臺,選擇目標應用。
在左側導航欄中,點擊 移動分析 > 日志管理。
在 拉取實時日志 標簽頁中,點擊 添加 按鈕。
填寫任務信息。其中,用戶 ID 為您的應用登錄系統中用戶的標識。通過
MPLogger.setUserId(String userId)
或消息推送上報用戶 ID 的方法設置。點擊 確認 按鈕,完成日志拉取任務創建。
步驟 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 則表示上傳成功。