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-阿裏雲