本文介绍如何在 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 则表示上传成功。