Saat menggunakan SDK Simple Log Service untuk mengirim permintaan API ke Simple Log Service, pengecualian dapat terjadi akibat gangguan jaringan atau latensi. Topik ini menjelaskan logika penanganan untuk pengecualian yang mungkin muncul selama penggunaan SDK.
Jenis pengecualian dan mekanisme penanganan
Pengecualian SDK dikategorikan menjadi jenis-jenis berikut:
Pengecualian yang dikembalikan oleh Simple Log Service. Jenis pengecualian ini ditangani oleh SDK Simple Log Service. Untuk detail lebih lanjut tentang jenis pengecualian ini, lihat deskripsi dan kode kesalahan setiap operasi API. Informasi lebih lanjut tentang kode kesalahan dapat ditemukan di Kode kesalahan.
Pengecualian jaringan yang terjadi saat menggunakan SDK Simple Log Service untuk mengirim permintaan. Jenis pengecualian ini mencakup pemutusan jaringan dan waktu tanggapan server habis.
Pengecualian yang dihasilkan oleh SDK Simple Log Service dan terkait dengan platform serta bahasa pemrograman, seperti kelebihan memori.
SDK Simple Log Service dalam setiap bahasa pemrograman melempar pengecualian untuk penanganan.
Pengecualian yang dikembalikan oleh Simple Log Service dan pengecualian jaringan yang terjadi selama pengiriman permintaan API ditangani oleh SDK Simple Log Service. Kemudian, SDK membungkus pengecualian tersebut dalam kelas LogException dan melemparkannya.
Pengecualian yang dihasilkan oleh SDK Simple Log Service dan terkait dengan platform serta bahasa pemrograman tidak ditangani oleh SDK. SDK secara langsung membungkus pengecualian tersebut dalam kelas Native Exception dari platform dan bahasa pemrograman terkait dan melemparkannya.
LogException
Kelas LogException didefinisikan oleh SDK Simple Log Service dan digunakan untuk menangani pengecualian yang terkait dengan logika Simple Log Service. Kelas ini mewarisi kelas dasar penanganan pengecualian dalam setiap bahasa pemrograman. Kelas LogException menyediakan informasi pengecualian berikut:
Kode kesalahan: menunjukkan jenis pengecualian. Kode kesalahan dari pengecualian yang dikembalikan oleh Simple Log Service sesuai dengan kode kesalahan API terkait. Kode kesalahan untuk pengecualian jaringan adalah
RequestError. Informasi lebih lanjut tentang kode kesalahan dalam berbagai bahasa pemrograman dapat ditemukan di Referensi API.Pesan kesalahan: menunjukkan pesan yang menggambarkan pengecualian. Pesan kesalahan dari pengecualian yang dikembalikan oleh Simple Log Service sesuai dengan pesan kesalahan API terkait. Pesan kesalahan untuk pengecualian jaringan adalah
permintaan gagal.Informasi lebih lanjut tentang pesan kesalahan dalam berbagai bahasa pemrograman dapat ditemukan di Referensi API.ID Permintaan: menunjukkan ID permintaan dari mana pengecualian berasal. ID Permintaan dibuat oleh Simple Log Service. ID ini hanya valid jika Simple Log Service mengembalikan pesan kesalahan. Jika tidak, ID tersebut adalah string kosong. Jika pengecualian terjadi saat mengirim permintaan API, Anda dapat mencatat dan memberikan ID Permintaan terkait kepada tim Simple Log Service untuk pemecahan masalah.
Kegagalan permintaan dan percobaan ulang
Saat menggunakan SDK Simple Log Service untuk mengakses Simple Log Service, permintaan akses Anda mungkin gagal karena pengecualian seperti pemutusan jaringan sementara, latensi transmisi, atau respons server yang lambat. Simple Log Service melempar pengecualian tersebut secara langsung tanpa mengimplementasikan logika percobaan ulang. Dalam hal ini, Anda harus menentukan logika penanganan kustom, seperti mencoba ulang permintaan atau melempar pengecualian.
Contoh
Sebagai contoh, pengecualian jaringan terjadi saat mengakses proyek bernama big-game di wilayah China (Hangzhou). Untuk menangani pengecualian, Anda dapat menggunakan kode berikut dalam berbagai bahasa pemrograman untuk menentukan jumlah percobaan ulang:
// Kode lain.
// Konfigurasikan variabel lingkungan. Dalam contoh ini, ID AccessKey dan Rahasia AccessKey diperoleh dari variabel lingkungan.
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;
/*
* Buat klien.
*/
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);
// Proses respons yang dikembalikan.
break;
}
catch(LogException e)
{
if (e.GetErrorCode() == "RequestError")
{
if ( i == max_retries - 1)
{
System.out.println("permintaan masih gagal setelah semua percobaan ulang.");
break;
}
else
System.out.println("kesalahan permintaan terjadi, coba lagi!");
}
else
{
System.out.println("kode kesalahan :" + e.GetErrorCode());
System.out.println("pesan kesalahan :" + e.GetErrorMessage());
System.out.println("requestId kesalahan :" + e.GetRequestId());
break;
}
}
catch(Exception ex)
{
System.out.println("pengecualian yang tidak dapat diperbaiki saat mencantumkan penyimpanan log.");
break;
}
}
// Kode lain.// Kode lain.
// Konfigurasikan variabel lingkungan. Dalam contoh ini, ID AccessKey dan Rahasia AccessKey diperoleh dari variabel lingkungan.
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;
// Buat klien.
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);
// Proses respons yang dikembalikan.
break;
}
catch(LogException e)
{
if (e.errorCode == "SLSRequestError")
{
if ( i == max_retries - 1)
{
Console.Writeline("permintaan masih gagal setelah semua percobaan ulang.");
break;
}
else
{
Console.Writeline("kesalahan permintaan terjadi, coba lagi!");
}
}
else
{
Console.Writeline("kode kesalahan :" + e.errorCode);
Console.Writeline("pesan kesalahan :" + e.Message);
Console.Writeline("requestId kesalahan :" + e.RequestId);
break;
}
}
catch(Exception ex)
{
Console.Writeline("pengecualian yang tidak dapat diperbaiki saat mencantumkan penyimpanan log.");
break;
}
}
// Kode lain.<?php
// Kode lain.
$endpoint = 'cn-hangzhou.sls.aliyuncs.com';
// Konfigurasikan variabel lingkungan. Dalam contoh ini, ID AccessKey dan Rahasia AccessKey diperoleh dari variabel lingkungan.
$accessId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKey = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$maxRetries = 3;
// Buat klien.
$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);
// Proses respons yang dikembalikan.
break;
}
catch (Aliyun_Sls_Exception $e)
{
if ($e->getErrorCode()=='RequestError')
{
if ($i+1 == $maxRetries)
{
echo "kode kesalahan :" . $e->getErrorCode() . PHP_EOL;
echo "pesan kesalahan :" . $e->getErrorMessage() . PHP_EOL;
break;
}
echo 'kesalahan permintaan terjadi, coba lagi!' . PHP_EOL;
}
else
{
echo "kode kesalahan :" . $e->getErrorCode() . PHP_EOL;
echo "pesan kesalahan :" . $e->getErrorMessage() . PHP_EOL;
echo "requestId kesalahan :" . $e->getRequestId() . PHP_EOL;
break;
}
}
catch (Exception $ex)
{
echo 'pengecualian yang tidak dapat diperbaiki saat mencantumkan penyimpanan log.' . PHP_EOL;
var_dump($ex);
break;
}
}
// Kode lain.from aliyun.log import LogClient, ListLogstoresRequest, LogException;
# Kode lain.
from aliyun.log.logclient import xrange
endpoint = 'cn-hangzhou.log.aliyuncs.com'
# Konfigurasikan variabel lingkungan. Dalam contoh ini, ID AccessKey dan Rahasia AccessKey diperoleh dari variabel lingkungan.
accessId = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
accessKey = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
maxRetries = 3
# Buat klien.
client = LogClient(endpoint, accessId, accessKey)
project = 'big-game'
lsRequest = ListLogstoresRequest(project)
for i in xrange(maxRetries):
try:
res = client.ListLogstores(lsRequest)
# Proses respons yang dikembalikan.
break
except LogException as e:
if e.get_error_code() == "RequestError":
if i+1 == maxRetries:
print("kode kesalahan :" + e.get_error_code())
print("pesan kesalahan :" + e.get_error_message())
break
else:
print("kesalahan permintaan terjadi, coba lagi!")
else:
print("kode kesalahan :" + e.get_error_code())
print("pesan kesalahan :" + e.get_error_message())
print("requestId kesalahan :" + e.get_request_id())
break
except Exception as ex:
print("pengecualian yang tidak dapat diperbaiki saat mencantumkan penyimpanan log.")
break
# Kode lain.