Todos os produtos
Search
Central de documentação

Simple Log Service:Tratamento de exceções

Última atualização: Jul 03, 2026

Ao usar o SDK do Simple Log Service para enviar requisições de API, podem ocorrer exceções devido a interrupções de rede ou latência. Este tópico descreve como o SDK trata essas exceções e como implementar lógica de nova tentativa.

Tipos de exceção e mecanismo de tratamento

As exceções do SDK dividem-se nos seguintes tipos:

  • Exceções retornadas pelo Simple Log Service. O SDK trata esses casos automaticamente. Para mais detalhes, consulte as descrições das operações de API e Códigos de erro.

  • Exceções de rede ocorridas durante o envio de requisições pelo SDK, como desconexão de rede e tempo limite de resposta do servidor.

  • Exceções específicas da plataforma e da linguagem geradas pelo SDK, como estouro de memória.

O SDK lança exceções de maneira diferente em cada linguagem de programação:

  • O SDK encapsula exceções retornadas pelo servidor e exceções de rede na classe LogException e as lança.

  • O SDK não trata exceções específicas da plataforma e da linguagem. A plataforma e a linguagem correspondentes encapsulam essas exceções na classe Native Exception e as lançam diretamente.

LogException

O SDK define a classe LogException para tratar exceções relacionadas à lógica do Simple Log Service. Essa classe herda da classe base de exceção de cada linguagem de programação e fornece as seguintes informações:

  • Código de erro: indica o tipo da exceção. Para exceções retornadas pelo servidor, corresponde ao código de erro da API. Para exceções de rede, o código é RequestError. Consulte a Referência de API para mais informações.

  • Mensagem de erro: descreve a exceção. Nas exceções retornadas pelo servidor, equivale à mensagem de erro da API. Nas exceções de rede, a mensagem é request is failed. Consulte a Referência de API para mais detalhes.

  • ID da requisição: identifica a requisição que provocou a exceção. O Simple Log Service gera esse ID, válido apenas quando o servidor retorna um erro; caso contrário, será uma string vazia. Forneça esse ID à equipe do Simple Log Service para auxiliar na solução de problemas.

Falhas de requisição e novas tentativas

Durante o uso do SDK do Simple Log Service, as requisições podem falhar por motivos como desconexão temporária de rede, latência de transmissão ou resposta lenta do servidor. O SDK lança exceções diretamente, sem implementar lógica de nova tentativa. Implemente seu próprio tratamento personalizado, como repetir a requisição ou lançar uma exceção específica.

Exemplos

Os exemplos a seguir demonstram como tratar exceções de rede com lógica de nova tentativa ao acessar um projeto chamado big-game na região China (Hangzhou):

// Other code. 
// Configure environment variables. In this example, the AccessKey ID and AccessKey secret are obtained from environment variables. 
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");   
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); 
String project = "big-game";
String endpoint = "cn-hangzhou.sls.aliyuncs.com";
int max_retries = 3;
/*
 * Create a 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);
        // Process the returned response. 
        break;
    }
    catch(LogException e)
    {
        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(Exception ex)
    {
        System.out.println("unrecoverable exception when listing logstores.");
        break;
    }
}
// Other code.
// Other code. 
// Configure environment variables. In this example, the AccessKey ID and AccessKey secret are obtained from environment variables. 
String accessId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID");     
String accessKey = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET");    
String project = "big-game";
String endpoint = "cn-hangzhou.sls.aliyuncs.com";
int max_retries = 3;
// Create a 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);
        // Process the returned response. 
        break;
    }
    catch(LogException e)
    {
        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(Exception ex)
    {
        Console.Writeline("unrecoverable exception when listing logstores.");
        break;
    }
}
// Other code.
<?php
// Other code. 
$endpoint = 'cn-hangzhou.sls.aliyuncs.com';
// Configure environment variables. In this example, the AccessKey ID and AccessKey secret are obtained from environment variables. 
$accessId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'); 
$accessKey = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'); 
$maxRetries = 3;
// Create a 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);
        // Process the returned response. 
        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;
    }
}
// Other code.
from aliyun.log import LogClient, ListLogstoresRequest, LogException;

# Other code. 
from aliyun.log.logclient import xrange

endpoint = 'cn-hangzhou.log.aliyuncs.com'
# Configure environment variables. In this example, the AccessKey ID and AccessKey secret are obtained from environment variables. 
accessId = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
accessKey =  os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
maxRetries = 3
# Create a client. 
client = LogClient(endpoint, accessId, accessKey)
project = 'big-game'
lsRequest = ListLogstoresRequest(project)
for i in xrange(maxRetries):
    try:
        res = client.ListLogstores(lsRequest)
        # Process the returned response. 
        break
    except LogException as e:
        if e.get_error_code() == "RequestError":
            if i+1 == maxRetries:
                print("error code :" + e.get_error_code())
                print("error message :" + e.get_error_message())
                break
            else:
                print("request error happens, retry it!")
        else:
            print("error code :" + e.get_error_code())
            print("error message :" + e.get_error_message())
            print("error requestId :" + e.get_request_id())
            break
    except Exception as ex:
        print("unrecoverable exception when listing logstores.")
        break
# Other code.