SDK 可能出现的异常错误可以分成如下几类:
- 由日志服务端返回的错误。这类错误由日志服务端返回并由 SDK 处理。关于这类错误的详细细节可以参考日志服务 API 的通用错误码 和各个 API 接口的具体说明。
- 由 SDK 在向服务端发出请求时出现的网络错误。这类错误包括网络连接不通,服务端返回超时等。
- 由 SDK 自身产生的、与平台及语言相关的错误,如内存溢出等。
目前,各个语言 SDK 的实现都采取抛出异常的方式处理错误。具体原则如下:
- 由如上第一或者第二类错误将会被 SDK 处理并包装在统一的 LogException 类抛出给用户处理。
- 由如上第三类错误不会被 SDK 处理,而是直接抛出平台及语言的 Native Exception 类给用户处理。
LogException:
LogException 类是 SDK 定义的、用于处理日志服务自身逻辑错误的异常类。它继承自各个语言的异常基类,提供如下异常信息:
- 错误代码(Error Code):标示错误类型。如果是来自服务端的返回错误,则这个错误代码 API 返回的错误代码一致。如果是 SDK 网络请求错误,则其错误代码为 “RequestError”。具体请参考各个语言的完整 API 参考。
- 错误消息(Error Message):标示错误消息。如果是来自服务端的响应错误,则这个错误消息 API 返回的错误消息一致。如果是 SDK 网络请求错误,则其错误消息为“request is failed.”。具体请参考各个语言的完整 API 参考。
- 错误请求 ID(Request Id):标示当前错误对应于服务端的请求 ID。该 ID 只有在服务端返回错误消息时有效,否则为空字符串。用户可以在遇到错误请求时记下该请求 ID 并提供给日志服务团队进行问题追踪和定位。
请求失败与重试:
在使用 SDK 访问日志服务端时,有可能会因为网络临时中断、传输延时过程、服务端处理过慢等一系列原因导致请求失败。目前,这类错误都直接以异常抛出,日志服务内部并未对此做任何重试逻辑。所以,您在使用 SDK 时需要自己定义相应的处理逻辑(重试请求或者直接报错等)。
示例:
假设您需要访问“华东 1 (杭州)”Region 下名字为 [backcolor=transparent]big-game 的 Project,且在出现网络异常时主动重试指定次数。各语言的代码片段如下:
Java:
Python: