全部产品

Android 客户端诊断

更新时间:2020-09-24 18:35:45

本文介绍如何在 Android 客户端中使用日志诊断服务。日志诊断在控制台下发任务时支持消息推送和移动同步双通道。

完成以下步骤进行 Android 客户端诊断:

  1. 初始化诊断服务
  2. 写入诊断日志
  3. 在控制台拉取日志

前置条件

初始化诊断服务

诊断服务支持使用移动同步或消息推送通道拉取诊断日志,两种通道的初始方式不同。

使用消息推送通道

使用消息推送通道时,您需要在 App 启动后完成以下操作:

使用移动同步通道

使用移动同步通道时,您需要在 App 启动后调用以下方法,完成通道初始化。

  1. // 设置 userId
  2. MPLogger.setUserId(String userId);
  3. // 初始化 Sync 通道,必须先设置 userId,否则会初始化失败
  4. MPDiagnose.initSyncChannel(Context context);

写入诊断日志

客户端收到下发的诊断任务时,只有使用 mPaaS 的日志工具 MPLogger 写入的日志才会被上传,因此推荐您使用 MPLogger 代替 android.util.Log 写日志。MPLogger 提供和原生 Log 类似的日志级别方法:

  1. void verbose(String tag, String msg);
  2. void debug(String tag, String msg);
  3. void info(String tag, String msg);
  4. void warn(String tag, String msg);
  5. void warn(String tag, Throwable t);
  6. void warn(String tag, String msg, Throwable tr);
  7. void error(String tag, String msg);
  8. void error(String tag, Throwable t);
  9. void error(String tag, String msg, Throwable t);
  10. void print(String tag, String msg);
  11. void print(String tag, Throwable t);

MPLogger 写入的日志,debug 包会在 logcat 中显示;release 包不会在 logcat 中显示。

在控制台拉取日志

您可以在控制台拉取使用 mPaaS 的日志工具打印的日志,从而快速便捷地分析 App 在指定机型或用户上出现的崩溃或异常问题。

步骤 1:创建日志拉取任务

  1. 进入 mPaaS 控制台,选择目标应用。
  2. 在左侧导航栏中,点击 移动分析 > 日志管理
  3. 拉取实时日志 标签页中,点击 添加 按钮。
  4. 填写任务信息。其中,用户 ID 为您的应用登录系统中用户的标识。通过 MPLogger.setUserId(String userId)或消息推送上报用户 ID 的方法设置。
  5. 点击 确认 按钮,完成日志拉取任务创建。

步骤 2:触发日志拉取任务

  1. 在日志拉取任务列表中,找到刚刚创建的任务,选择 触发通道,然后点击 操作 列的 触发
  2. 稍等片刻刷新页面,若任务状态为:
    • 任务处理完成:点击 查看 按钮即可下载诊断日志。
    • 调用 Push/Sync 服务成功:表示已下发上传诊断日志的消息,但客户端还未收到或收到但未上传日志。
      针对此情况,请确认您的 App 进程在系统中仍然存在;如果不存在请重启 App。如果重启后任务状态仍未变化,请参考下文进行初步排查。

问题排查

如果出现无法拉取到日志的问题,请根据所使用的诊断日志下发通道,按照对应的步骤进行排查。

使用消息推送通道

排查步骤如下:

  1. 进入 mPaaS 控制台 > 消息推送 页面,根据 userId 推送一条普通的消息到您的 App,确认消息推送通道畅通。
  2. 在消息推送通道畅通的情况下,先清空 logcat 日志,切换到 push 进程,然后在控制台诊断任务中再次点击 触发 按钮,观察 logcat 日志。
  3. 过滤 mPush14,观察是否收到诊断消息。若未收到,请确认推送通道是否已断开连接。
    1
  4. 确认收到诊断消息后,可查找是否有以下日志,确认诊断消息是否被转发到 MonitorService
    若报错找不到ClientMonitorService,请使用 mPaaS 插件更新 SDK:
    • 10.1.32 基线请升级到 10.1.68,并更新组件到最新版本。
    • 10.1.60 或 10.1.68 基线请更新组件到最新版本。
      2
  5. 确认 MonitorService 启动后,过滤 AlipayLogUploader,查看本地是否存在诊断日志。如果出现以下日志,说明本地存在诊断日志可以上传。
    本地存在日志
    如果出现以下日志,说明不存在诊断日志。
    本地不存在日志
    请检查以下项目:
    • 控制台创建的拉取实时日志任务,选取的时间段不能少于 1 小时;在选取的时间段内 App 须运行且输出诊断日志。
    • App 声明并动态申请了以下权限:
      1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  6. 确认本地存在诊断日志后,过滤 HttpUpload,查看日志上传是否成功,若 responseCode 为 200 则表示上传成功。
    3

使用移动同步通道

排查步骤如下:

  1. 清空 logcat 日志,切换到主进程,初始化同步通道后,过滤 isConnected,观察同步通道建连是否成功。
    4
  2. 在 mPaaS 控制台诊断任务中再次点击 触发 按钮,过滤 MPDiagnose,观察是否收到诊断消息,以及是否启动了MonitorService
    若未收到消息,请确认设置的 userId 和诊断任务中填写的 userId 是否一致;若报错找不到ClientMonitorService,请使用 mPaaS 插件更新 SDK:
    • 10.1.32 基线请升级到 10.1.68,并更新组件到最新版本。
    • 10.1.60 或 10.1.68 基线请更新组件到最新版本。
      5
  3. 确认 MonitorService 启动后,切换到 push 进程,过滤 AlipayLogUploader,查看本地是否存在诊断日志。如果出现以下日志,说明本地存在诊断日志可以上传。
    本地存在日志
    如果出现以下日志,说明不存在诊断日志。
    本地不存在日志
    请检查以下项目:
    • 控制台创建的拉取实时日志任务,选取的时间段不能少于 1 小时;在选取的时间段内 App 须运行且输出诊断日志。
    • App 声明并动态申请了以下权限:
      1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  4. 确认本地存在诊断日志后,过滤 HttpUpload,查看日志上传是否成功,若 responseCode 为 200 则表示上传成功。
    6