如何排查实时日志拉取失败的问题(iOS)

问题描述

在日常的开发工作中,开发者经常会通过日志组件在控制台中打印出一些必要信息来帮助快速定位和排查问题。

在 App 已经分发到用户手中之后,开发者可以利用 mPaaS 客户端 SDK 提供的客户端诊断日志的接口进行日志记录,并且可以通过控制台拉取写入的日志。但是如果接入和使用方法错误,可能无法正确拉取到诊断日志。

问题复现

  1. 登录控制台,进入 产品与服务 > 移动开发平台 > 移动分析 > 日志管理 > 拉取实时日志,单击 添加 按钮进入新增诊断任务页面,然后根据页面提示填写诊断任务内容。

  2. 完成诊断任务内容的填写后,单击 确定 按钮生成一条诊断任务。诊断任务创建后,您还需要单击 触发 按钮触发诊断任务的下发。任务下发成功后,页面上的任务状态会更新。

  3. 客户端收到诊断任务后,将日志上传到服务器,同时任务状态更新为 处理完成。此时,您可以单击 查看 按钮进入子任务查看页面,单击 下载 按钮下载日志。

结果分析

任务 的状态有如下几种:

  • 初始化完成

  • 调用 Sync 服务成功(iOS,仅调用 Sync,非发送到客户端)

  • 调用 Push 服务成功(Android,仅调用 Push,非发送到客户端)

  • 调用 Sync 失败(iOS)

  • 调用 Push 服务失败(Android)

  • 任务处理完成

  • 任务执行失败

  • 部分任务执行失败

子任务 的状态有如下两种:

  • 过期或无权限

  • 处理完成

正常情况下,经过上述操作步骤可以拉取到诊断日志,即任务状态为“任务处理完成”,子任务态为 “处理完成”。发生异常时,最常见的情况是任务状态为“任务处理完成”,但是子任务状态为“过期或无权限”。此情况表示拉取失败的原因可能为以下几种(包括但不仅限于):

  • 诊断日志已经过期,在客户端已经被删除。

  • 客户端无文件写入权限,导致本地日志生成失败。

  • 由于其他原因导致的客户端日志生成失败。

问题排查

检查 MSS是否注册成功

在 iOS 平台,日志拉取依赖 MSS 服务。因此,首先需要确认客户端 MSS 服务是否正常工作。可以通过观察控制台 Sync 类目的日志输出。以下为 MSS 组件连接正常和异常情况下的日志输出示例。

如果 MSS 不能正常工作,需要首先解决 MSS 服务的连接问题。

  • MSS 组件连接正常

2020-03-25 11:19:33.873603+0800 Demo[24958:6621533] [Sync] start sync ssl:cn-hangzhou-mss-link.cloud.alipay.com,settings:{
2020-03-25 11:19:33.873873+0800 Demo[24958:6621533] [Sync] LL socket connect SUCESS!
  • MSS 组件异常(以下示例为网络问题引起)

2020-03-25 11:16:53.624467+0800 Demo[24452:6612201] [Sync] LL connectToHost=cn-hangzhou-mss-link.cloud.alipay.com port:443
2020-03-25 11:16:53.627994+0800 Demo[24452:6612201] [Sync] LL onSocket:willDisconnectWithError:err Error Domain=NSPOSIXErrorDomain Code=50 "Network is down"

检查本地日志是否写入到沙盒中

重要

建议在断网的情况下进行。

确认代码中有写入本地日志的动作后,进入 App 沙盒路径 Library/file/<date>/11.2nd,查看是否有类似如下的文件产生。

重要

在查看文件时,需要注意查看文件的创建时间和修改事件是否与测试时间相符。

2

检查拉取动作指令是否到达客户端

在 mPaaS 日志拉取控制台触发 Sync 动作后,观察客户端控制台输出,是否通过 MSS 接到相关指令,例如:4