258
小米路由器
错误处理__基本介绍_SDK_日志服务-阿里云
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下名字为"big-game”的Project,且在出现网络异常时主动重试指定次数。各语言的代码片段如下:
Java
//其他代码......
String accessId = "your_access_id"; //TODO:用你的真实阿里云AccessKeyId替代。
String accessKey = "your_access_key"; //TODO:用你的真实阿里云AccessKeySecret替代。
String project = "big-game";
String endpoint = "cn-hangzhou.sls.aliyuncs.com";
int max_retries = 3;
/*
* 构建一个client
*/
Client client = new Client(accessId, accessKey, endpoint);
ListLogStoresRequest lsRequest = new ListLogStoresRequest(project);
for (int i = 0; i < max_retries; i++)
{
try
{
ListLogStoresResponse res = client.ListLogStores(lsRequest)
//TODO: 处理返回的response......
}
catch(LogException ex)
{
if (e.GetErrorCode() == "RequestError")
{
if ( i == max_retries - 1)
{
System.out.println("request is still failed after all retries.");
break;
}
else
System.out.println("request error happens, retry it!");
}
else
{
System.out.println("error code :" + e.GetErrorCode());
System.out.println("error message :" + e.GetErrorMessage());
System.out.println("error requestId :" + e.GetRequestId());
break;
}
}
catch(...)
{
System.out.println("unrecoverable exception when listing logstores.");
break;
}
}
//其他代码......
.NET(C#)
//其他代码......
String accessId = "your_access_id"; //TODO:用你的真实阿里云AccessKeyId替代。
String accessKey = "your_access_key"; //TODO:用你的真实阿里云AccessKeySecret替代。
String project = "big-game";
String endpoint = "cn-hangzhou.sls.aliyuncs.com";
int max_retries = 3;
//创建一个Client
SLSClient client = new SLSClient(endpoint, accessId, accessKey);
ListLogstoresRequest request = new ListLogstoresRequest();
request.Project = project;
for (int i = 0; i < max_retries; i++)
{
try
{
ListLogstoresResponse response = client.ListLogstores(request);
//TODO: 处理返回的response......
}
catch(LogException ex)
{
if (e.errorCode == "SLSRequestError")
{
if ( i == max_retries - 1)
{
Console.Writeline(“request is still failed after all retries.”);
break;
}
else
{
Console.Writeline("request error happens, retry it!");
}
}
else
{
Console.Writeline("error code :" + e.errorCode;
Console.Writeline("error message :" + e.Message;
Console.Writeline("error requestId :" + e.RequestId;
break;
}
}
catch(...)
{
Console.Writeline("unrecoverable exception when listing logstores.");
break;
}
}
//其他代码......
PHP
<?php
//其他代码......
$endpoint = 'cn-hangzhou.sls.aliyuncs.com';
$accessId = 'your_access_id'; // TODO:用你的真实阿里云AccessKeyId替代
$accessKey = 'your_access_key'; //TODO:用你的真实阿里云AccessKeySecret替代
$maxRetries = 3;
// 构建一个sls client
$client = new Aliyun_Sls_Client($endpoint, $accessId, $accessKey);
$project = 'big-game';
$request = new Aliyun_Sls_Models_ListLogstoresRequest($project);
for($i = 0; $i < $maxRetries; ++$i)
{
try
{
$response = $client->ListLogstores($request);
//TODO: 处理返回的response......
}
catch (Aliyun_Sls_Exception $e)
{
if ($e->getErrorCode()=='RequestError')
{
if ($i+1 == $maxRetries)
{
echo "error code :" . $e->getErrorCode() . PHP_EOL;
echo "error message :" . $e->getErrorMessage() . PHP_EOL;
break;
}
echo 'request error happens, retry it!' . PHP_EOL;
}
else
{
echo "error code :" . $e->getErrorCode() . PHP_EOL;
echo "error message :" . $e->getErrorMessage() . PHP_EOL;
echo "error requestId :" . $e->getRequestId() . PHP_EOL;
break;
}
}
catch (Exception $ex)
{
echo 'unrecoverable exception when listing logstores.' . PHP_EOL;
var_dump($ex);
break;
}
}
//其他代码......
Python
//其他代码......
endpoint = 'cn-hangzhou.sls.aliyuncs.com'
accessId = 'your_access_id' # TODO:用你的真实阿里云AccessKeyId替代
accessKey = 'your_access_key' # TODO:用你的真实阿里云AccessKeySecret替代
maxRetries = 3
# 构建一个 client
client = Client(endpoint, accessId, accessKey)
project = 'big-game'
lsRequest = ListLogstoresRequest(project)
for i in xrange(maxRetries):
try:
res = client.ListLogstores(lsRequest)
# TODO: 处理返回的response......
except LogException as e:
if e.getErrorCode() == "RequestError":
if i+1 == maxRetries:
print "error code :" + e.getErrorCode()
print "error message :" + e.getErrorMessage()
break
else:
print "request error happens, retry it!"
else:
print "error code :" + e.getErrorCode()
print "error message :" + e.getErrorMessage()
print "error requestId :" + e.getRequestId()
break
except Exception as e:
print 'unrecoverable exception when listing logstores.'
break
//其他代码......
最后更新:2016-05-06 10:44:22
上一篇:
查询语法__API-Reference_日志服务-阿里云
下一篇:
接口规范__基本介绍_SDK_日志服务-阿里云
批量删除消息__队列接口规范_API使用手册_消息服务-阿里云
云服务器如何通过内网访问RDS?__MYSQL使用_技术运维问题_云数据库 RDS 版-阿里云
滑动验证插件__使用手册_数据风控-阿里云
价格概揽__购买指导_视频直播-阿里云
RDS插件数据库运维__最佳实践_Eclipse 插件-阿里云
华为云、腾讯云、阿里云,三虎相争,混战刚刚开始
DRDS操作__快速开始_分布式关系型数据库 DRDS-阿里云
CREATE VIEW__数据定义语言_SQL语法参考_云数据库 OceanBase-阿里云
网络正常但无法通过FTP连接ECS或虚机服务器__故障处理_云服务器 ECS-阿里云
云服务器 ECS实例规格族
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云