文档

排查追踪

更新时间:

本章节介绍在使用HarmonyOS SDK过程中遇到问题时,可通过以下手段协助排查解决问题。

日志输出

hilog输出

SDK提供hilog日志输出,在本地环境开发时,可以通过开发工具输出日志查看。示例如下:

import { httpdns } from '@aliyun/httpdns';

httpdns.enableHiLog();

打开hilog日志输出配置后,在调用SDK接口时,会输出相关日志,方便查看SDK的网络请求情况,示例如下:

04-16 00:10:01.201   12063-12063  A08000/100000                  com.aliyu...dns.demo  I     asyncResolve www.aliyun.com 3 begin
04-16 00:10:01.202   12063-12063  A08000/Http                    com.aliyu...dns.demo  I     http://[2401:b180:2000:30::1c]/100000/d?host=www.aliyun.com&query=6&sid=4vkjAaOpeRXn&sdk=harmony_0.0.0 begin
04-16 00:10:01.281   12063-12063  A08000/Http                    com.aliyu...dns.demo  I     http://[2401:b180:2000:30::1c]/100000/d?host=www.aliyun.com&query=6&sid=4vkjAaOpeRXn&sdk=harmony_0.0.0 success {"host":"www.aliyun.com","ttl":30,"origin_ttl":30,"client_ip":"2401:b180:8000:1:e0e3:8b81:e0e3:8b81","ipsv6":["2401:b180:1:60:0:0:0:5","2401:b180:1:60:0:0:0:6"]}
04-16 00:10:01.281   12063-12063  A08000/100000                  com.aliyu...dns.demo  I     asyncResolve www.aliyun.com 3 end {"host":"www.aliyun.com","hasResult":true,"valid":true,"ipv6s":["2401:b180:1:60:0:0:0:5","2401:b180:1:60:0:0:0:6"]}

其中 http://[2401:b180:2000:30::1c]/100000/d?host=www.aliyun.com&query=6&sid=4vkjAaOpeRXn&sdk=harmony_0.0.0 即为SDK发出的请求,关于请求的协议请参考单域名解析接口等HTTP API说明文档。

在线日志收集

SDK提供了日志注册接口,方便应用集成自己的日志采集系统。示例如下:

import { httpdns, ILogger } from '@aliyun/httpdns';
import hilog from '@ohos.hilog';

class AppLogger implements ILogger {
  log(level: hilog.LogLevel, msg: string): void {
    // 接收日志到日志系统。
    // 建议默认情况下,采集 hilog.LogLevel.ERROR及以上的日志
  }
}

const appLogger = new AppLogger();

httpdns.addLogger(appLogger);

建议在线上采集hilog.LogLevel.ERROR及以上的日志,或者通过主动的开关策略,控制何时采集日志。

后端排查

当遇到一些不确定的问题时,可能需要HTTPDNS服务侧一起排查相关问题。SDK提供了一个sessionId字段,每次向服务侧发起解析请求时,SDK都会传递sessionId字段,所以当发生问题时,请采集sessionId字段,便于HTTPDNS可以根据此字段找到相关的解析请求。sessionId的获取方法如下:

import { httpdns, HttpDnsError } from '@aliyun/httpdns';
import hilog from '@ohos.hilog';

const ACCOUNT_ID = '这里需要替换为阿里云HTTPDNS控制台的Account ID';

httpdns.getService(ACCOUNT_ID).then((service) => {
  // ************* 获取sessionId begin *************
  const sessionId = service.getSessionId();
  // ************* 获取sessionId end *************
  console.log(`sessionId is ${sessionId}`);
}).catch((e: HttpDnsError) => {
  console.error(`失败 ${e.code} ${e.message}`);
});

错误码

SDK的API在异常时会抛出HttpDnsError类型的错误,有错误码code和错误信息message两个字段,可以根据具体错误码排查错误原因

错误码

错误信息

处理方法

备注

HTTPDNS_000

系统错误

查看具体的错误信息,会有系统错误的错误码

场景是调用系统API时,系统API异常报错

HTTPDNS_001

内部错误

将具体错误信息反馈给EMAS进行排查

场景是SDK出现预期外的异常错误

HTTPDNS_002

未知错误

将具体错误信息反馈给EMAS进行排查

场景是SDK出现预期外的异常错误

HTTPDNS_003

服务禁用

请和EMAS联系确认账号状态是否正常

HTTPDNS_004

请求频繁

不需要处理

场景是网络不佳时,请求会一直失败,此时SDK会限制请求频次,避免影响应用性能

HTTPDNS_005

SDns请求必须包含cacheKey参数

检查软件定义解析的cacheKey参数是否正确传入

HTTPDNS_006

SDns参数的key仅能包含英文字母、数字、-、_。

检查软件定义解析的参数是否符合要求

HTTPDNS_007

SDns参数的value编码后仅能包含英文字母、数字、-、_。

检查软件定义解析的参数值是否符合要求

HTTPDNS_008

SDns参数太长。

软件定义解析的参数序列化后不能超过1000字符,请精简。

HTTPDNS_100

请求失败

将具体错误信息反馈给EMAS进行排查

HTTPDNS服务返回非200的HTTP Status Code

HTTPDNS_101

请求失败

不需要处理

网络超时、或者网络不通。 SDK内部已经有重试等机制减少此类异常出现概率

HTTPDNS_102

服务报错

请参考错误码列表处理

HTTPDNS_200

未配置Context无法使用DB

请检查SDK初始化配置是否缺少context字段

HTTPDNS_201

获取DB失败

请查看具体错误信息处理

获取数据库时报错

HTTPDNS_202

读取DB失败

请查看具体错误信息处理

读取数据库时报错

HTTPDNS_203

保存DB失败

请查看具体错误信息处理

保存数据库时报错

HTTPDNS_204

清除DB失败

请查看具体错误信息处理

清除数据库时报错

HTTPDNS_205

获取配置存储失败

请查看具体错误信息处理

getPreferencesSync时报错

HTTPDNS_206

读取配置存储失败

请查看具体错误信息处理

读取配置时报错

HTTPDNS_207

写入配置存储失败

请查看具体错误信息处理

写入配置时报错

  • 本页导读 (0)