SDK のエラーは次のように分類できます。
  • Log Service より SDK に返されるエラー (詳細は、Log Service API の「Common error codes」および 各 API のドキュメントを参照)
  • SDK より Log Service にリクエストを送信した際に発生するネットワークエラー (ネットワークの中断や Log Service のレスポンスにタイムアウト)
  • SDK で発生したプラットフォームやプログラム関連のエラー (メモリオーバーフローなど)
SDK でエラーが発生した場合、現時点では、どの言語でも例外が返されます。 基本的には次のように処理されます。
  • 上記の 1 つ目および 2 つ目のエラーは、SDK の LogException クラスがユーザーに返されます。
  • 3 つ目のエラーは、SDK では処理されませんが、プラットフォームまたは言語の例外クラスがユーザーに返されます。

LogException

SDK の LogException クラスには、Log Service に論理的なエラーが発生した際の処理が定義されています。 いずれの言語でも、基本の例外クラスは継承され、次の例外情報が渡されます。
  • エラーコード: エラーの種類を示します。 Log Service の返すエラーの場合、API から返されたエラーコードになります。 SDK リクエストによるネットワークエラーの場合、エラーコードは 「RequestError」となります。 詳細については、各言語の API 完全リファレンスをご参照ください。
  • エラーメッセージ: Log Service の返すエラーの場合、API から返されたエラーメッセージになります。 SDK リクエストによるネットワークエラーの場合、 エラーメッセージは「request is failed (リクエストに失敗)」となります。 詳細については、各言語の API 完全リファレンスをご参照ください。
  • リクエスト ID: エラーの発生した Log Service リクエストの ID。 エラーメッセージが返された場合にのみリクエスト ID が入ります。 返すエラーメッセージがない場合は、空の文字列になります。 リクエストエラーが発生した場合は、チケットを起票して、サービスセンターにお問い合わせください。 その際、リクエスト ID をお知らせください。

リクエストに失敗およびリクエストの再試行

SDK より Log Service にアクセスする場合は、一時的なネットワーク断、伝送遅延、または、Log Service の処理に時間がかかる、といったことが原因でリクエストに失敗することがあります。 この種のエラーは、現時点では、そのまま例外として返され、Log Service はリクエストを再試行しません。 したがって、SDK を使用する場合には、その場合の処理を定義する必要があります (リクエストを再試行するか、そのままエラーを返す)。

中国 (杭州) リージョンの big-game プロジェクトにアクセスした際に、ネットワーク例外が発生した場合、リクエストを指定の回数再試行するとします。 各言語のコードは次のようになります。

Java:

// これより前のコードは省略
String accessId = "your_access_id"; // TODO: Alibaba Cloud AccessKey ID を指定
String accessKey = "your_access_key"; // TODO: Alibaba Cloud AccessKey Secret を指定
String project = "big-game";
String endpoint = "cn-hangzhou.sls.aliyuncs.com";
int max_retries = 3;
/*
 * クライアントを作成
 */
Client client = new client (adord, accesskey, endpoint );
ListLogStoresRequest lsRequest = new ListLogStoresRequest(project);
for (int i = 0; i < max_retries; i++)
{
    try
    {
        ListLogStoresResponse res = client.ListLogStores(lsRequest)
        //TODO: レスポンスに対する処理を記述
        break;
    }
    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: Use your Alibaba Cloud AccessKey ID.
String accessKey = "your_access_key"; //TODO: Use your Alibaba Cloud AccessKey Secret.
String project = "big-game";
String endpoint = "cn-hangzhou.sls.aliyuncs.com";
int max_retries = 3;
// クライアントを作成
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: レスポンスに対する処理を記述
        break;
    }
    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: Alibaba Cloud AccessKey ID を指定
$accessKey = 'your_access_key'; //TODO: Alibaba Cloud AccessKey Secret を指定
$maxRetries = 3;
// クライアントを作成
$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: レスポンスに対する処理を記述
        break;
    }
    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: Alibaba Cloud AccessKey ID を指定
$accessKey = 'your_access_key'; //TODO: Alibaba Cloud AccessKey Secret を指定
maxRetries = 3
# Construct a client
client = Client(endpoint, accessId, accessKey)
project = 'big-game'
lsRequest = ListLogstoresRequest(project)
for i in xrange(maxRetries):
    try:
        res = client.ListLogstores(lsRequest)
        # TODO: レスポンスに対する処理を記述
        break
    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
// 以降のコードは省略