Topik ini menjelaskan cara menggunakan SDK Simple Log Service untuk Flutter guna mengumpulkan log.
Prasyarat
SDK Simple Log Service untuk Flutter telah diinstal. Untuk informasi selengkapnya, lihat Instal SDK Simple Log Service untuk Flutter.
Inisialisasi SDK
Pada skenario umum, Anda dapat menginisialisasi SDK dengan kode berikut. Jika ingin menentukan ukuran setiap paket log yang dikirim ke Simple Log Service dan mengaktifkan fitur unggah yang dapat dilanjutkan (resumable upload), konfigurasikan kelas LogProducerConfiguration. Untuk informasi selengkapnya, lihat Konfigurasikan parameter dalam kelas LogProducerConfiguration.
import 'package:aliyun_log_dart_sdk/aliyun_log_dart_sdk.dart';
AliyunLogDartSdk? _aliyunLogSdk;
void _initProducer() async {
// Tentukan endpoint Simple Log Service, nama project, dan nama Logstore. Anda dapat mengonfigurasi parameter ini secara dinamis.
LogProducerConfiguration configuration = LogProducerConfiguration(
endpoint: 'your endpoint', project: 'your project', logstore: 'your logstore'
);
// Pasangan AccessKey yang digunakan untuk mengakses Simple Log Service. Untuk informasi selengkapnya, lihat Pasangan AccessKey. Pasangan AccessKey milik Akun Alibaba Cloud memiliki izin atas semua operasi API. Menggunakan kredensial ini untuk melakukan operasi di Simple Log Service merupakan operasi berisiko tinggi. Kami menyarankan agar Anda menggunakan Pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Untuk membuat Pengguna RAM, login ke Konsol RAM.
configuration.accessKeyId = 'your access key id';
configuration.accessKeySecret = 'your access key secret';
configuration.securityToken = 'your access key token'; // Tentukan token Security Token Service (STS). Parameter ini hanya diperlukan jika Anda menggunakan STS untuk mendapatkan pasangan AccessKey temporary.
_aliyunLogSdk = AliyunLogDartSdk();
LogProducerResult result = await _aliyunLogSdk!.initProducer(configuration);
}Untuk informasi lebih lanjut tentang cara memperoleh informasi yang diperlukan untuk inisialisasi SDK, lihat topik berikut:
Kirim log
Anda dapat menggunakan metode addLog untuk mengirim log bisnis kustom.
LogProducerResult code = await _aliyunLogSdk!.addLog({
'str': 'str value',
'int': 12,
'double': 12.12,
'boolean': true,
'map': {'key': 'value', 'inntt': 3333},
'array': ['a1', 'a2'],
'null': null,
'content': 'Chinese'
});Jika code == LogProducerResult.ok dikembalikan, berarti log berhasil dikirim. Jika kode kesalahan dikembalikan, lakukan pemecahan masalah sesuai petunjuk pada bagian Kode kesalahan dalam topik ini.
Aturan obfuscation
Jika obfuscation diaktifkan untuk proyek Flutter Anda, tambahkan aturan berikut ke file konfigurasi obfuscation proyek tersebut. Jika tidak, proyek Android mungkin tidak berjalan sebagaimana mestinya. Secara default, obfuscation diaktifkan untuk Flutter versi 1.16.2 dan yang lebih baru. Proyek iOS tidak terpengaruh oleh aturan ini.
-keep class com.aliyun.sls.android.producer.* { *; }
-keep interface com.aliyun.sls.android.producer.* { *; }Konfigurasi parameter dinamis
SDK Simple Log Service untuk Flutter mendukung konfigurasi dinamis untuk parameter seperti Endpoint, Project, Logstore, dan AccessKey.
Kode contoh untuk mengonfigurasi parameter Endpoint, Project, dan Logstore secara dinamis:
await _aliyunLogSdk!.setEndpoint('new-endpoint'); await _aliyunLogSdk!.setProject('new-project-name'); await _aliyunLogSdk!.setLogstore('new-logstore-name');Kode contoh untuk mengonfigurasi parameter AccessKey secara dinamis:
// Parameter SecurityToken bersifat opsional. Parameter ini hanya diperlukan jika Anda menggunakan STS untuk mendapatkan pasangan AccessKey temporary. await _aliyunLogSdk!.setAccessKey('your accesskey id', 'your accesskey secret', securityToken: 'your accesskey token');Kode contoh untuk mengonfigurasi parameter Source, Topic, dan Tag secara dinamis:
await _aliyunLogSdk!.setSource('flutter'); await _aliyunLogSdk!.setTopic('flutter-test'); await _aliyunLogSdk!.addTag('tag1', 'value1'); await _aliyunLogSdk!.addTag('tag2', 'value2');Kode contoh untuk mengonfigurasi parameter lainnya secara dinamis:
PentingMetode
AliyunLogDartSdk.updateConfiguration()tidak mendukung konfigurasi dinamis untuk parameter yang terkait dengan unggah yang dapat dilanjutkan (resumable upload).LogProducerConfiguration configuration = LogProducerConfiguration(); configuration.dropDelayLog = true; configuration.dropUnauthorizedLog = true; // Anda dapat mengonfigurasi parameter dalam kelas LogProducerConfiguration secara dinamis dengan cara yang sama. await _aliyunLogSdk!.updateConfiguration(configuration);
Konfigurasi callback untuk pengiriman log
SDK Simple Log Service untuk Flutter mendukung callback saat log dikirim atau gagal dikirim. Informasi callback akan dihasilkan sehingga Anda dapat memantau status SDK atau memperbarui pengaturan parameternya.
_aliyunLogSdk!.setLogCallback((resultCode, errorMessage, logBytes, compressedBytes) {
// Terjadi kesalahan parameter. Anda perlu memperbarui pengaturan parameter.
if (LogProducerResult.parametersInvalid == resultCode) {
// Misalnya, Anda dapat mengubah parameter Endpoint.
_aliyunLogSdk!.setEndpoint('your endpoint');
// Kesalahan parametersInvalid terjadi karena pasangan AccessKey tidak ditentukan atau tidak valid.
_aliyunLogSdk!.setAccessKey('your access key id', 'your access key secret', securityToken: 'your token');
}
// Terjadi kesalahan timeout otorisasi. Anda perlu memperbarui pasangan AccessKey Anda.
if (LogProducerResult.sendUnauthorized == resultCode) {
_aliyunLogSdk!.setAccessKey('your access key id', 'your access key secret', securityToken: 'your token');
}
});Aktifkan unggah yang dapat dilanjutkan (resumable upload)
Jika ingin mengaktifkan fitur unggah yang dapat dilanjutkan, Anda harus mengaktifkannya saat menginisialisasi AliyunLogDartSdk. Setelah SDK diinisialisasi, Anda tidak dapat mengubah parameter terkait unggah yang dapat dilanjutkan secara dinamis.
Kode contoh untuk mengaktifkan unggah yang dapat dilanjutkan saat AliyunLogDartSdk diinisialisasi:
configuration.persistent = true; // Aktifkan unggah yang dapat dilanjutkan.
configuration.persistentFilePath = 'flutter/demo'; // Jalur cache untuk log biner.
configuration.persistentForceFlush = false; // Nonaktifkan refresh paksa. Kami menyarankan agar Anda menonaktifkan refresh paksa karena dapat menurunkan performa sistem.
configuration.persistentMaxFileCount = 10; // Jumlah maksimum file yang dapat di-cache. Nilai default: 10.
configuration.persistentMaxFileSize = 1024 * 1024; // Ukuran maksimum setiap file yang di-cache. Nilai default: 1024 * 1024.
configuration.persistentMaxLogCount=64 * 1024; // Jumlah maksimum log yang dapat di-cache. Nilai default: 64 * 1024.
_aliyunLogSdk = AliyunLogDartSdk();
LogProducerResult result = await _aliyunLogSdk!.initProducer(configuration);Konfigurasi parameter dalam kelas LogProducerConfiguration
Tabel berikut menjelaskan parameter yang dapat dikonfigurasi dalam kelas LogProducerConfiguration.
Parameter | Tipe data | Deskripsi |
endpoint | string | Endpoint Simple Log Service untuk wilayah tempat project berada. Contoh: |
project | string | Nama project. Untuk informasi selengkapnya, lihat Project. |
logstore | string | Nama Logstore. Untuk informasi selengkapnya, lihat Logstore. |
accesskeyId | string | ID AccessKey yang digunakan untuk mengakses Simple Log Service. Untuk informasi selengkapnya tentang cara memperoleh ID AccessKey, lihat Pasangan AccessKey. |
accessKeySecret | string | Rahasia AccessKey yang digunakan untuk mengakses Simple Log Service. Untuk informasi selengkapnya tentang cara memperoleh rahasia AccessKey, lihat Pasangan AccessKey. |
securityToken | string | Token STS yang digunakan untuk memperoleh pasangan AccessKey temporary. Jika Anda menggunakan STS untuk memperoleh pasangan AccessKey temporary, Anda harus mengonfigurasi parameter ini. Untuk informasi selengkapnya tentang cara memperoleh token STS, lihat AssumeRole. |
debuggable | bool | Menentukan apakah mode debugging diaktifkan. Nilai default: false. Jika Anda mengalami masalah dalam pengumpulan data, kami menyarankan agar Anda mengaktifkan mode debugging. |
maxBufferLimit | int | Memori maksimum yang tersedia. Nilai default: 64*1024*1024. Satuan: byte. |
connectTimeout | int | Waktu timeout untuk koneksi jaringan. Nilai default: 10. Satuan: detik. Kami menyarankan agar Anda mempertahankan nilai default. |
sendTimeout | int | Waktu timeout untuk operasi pengiriman. Nilai default: 15. Satuan: detik. Kami menyarankan agar Anda mempertahankan nilai default. |
ntpTimeOffset | int | Selisih antara waktu perangkat dan waktu standar. Nilai default: 0. Satuan: detik. Kami menyarankan agar Anda mempertahankan nilai default. SDK mendukung koreksi waktu otomatis. |
maxLogDelayTime | int | Selisih antara waktu log dan waktu lokal. Nilai default: 7. Satuan: hari. Jika nilai ini terlampaui, SDK akan menangani masalah berdasarkan pengaturan parameter dropDelayLog. Kami menyarankan agar Anda mempertahankan nilai default. |
dropDelayLog | bool | Menentukan apakah log yang selisih waktunya melebihi nilai parameter maxLogDelayTime akan dibuang. Nilai default: false. Nilai bidang __time__ akan diatur ulang ke waktu saat ini. |
dropUnauthorizedLog | bool | Menentukan apakah log yang mencatat kegagalan autentikasi akan dibuang. Nilai default: false. |
source | string | Sumber log, yang sama dengan nilai bidang __source__. Nilai default: Android atau iOS. |
topic | string | Topik log, yang sama dengan nilai bidang __topic__. Tidak ada nilai default. |
_tags | string | Metadata tag, yang sama dengan nilai bidang __tag__:xxx:yyy. Tidak ada nilai default. Anda dapat menggunakan metode |
packetLogBytes | int | Ukuran setiap paket log yang perlu dikirim. Nilai valid: 1 hingga 5242880. Satuan: byte. Nilai default: 1024 * 1024. |
packetLogCount | int | Jumlah maksimum log dalam setiap paket log yang perlu dikirim. Nilai valid: 1 hingga 4096. Nilai default: 1024. |
packetTimeout | int | Waktu timeout menunggu paket log sebelum dikirim. Paket log akan langsung dikirim saat timeout tercapai. Nilai default: 3000. Satuan: milidetik. |
persistent | boolean | Menentukan apakah unggah yang dapat dilanjutkan (resumable upload) diaktifkan. Nilai default: false. Kami menyarankan agar Anda mengaktifkan fitur ini. |
persistentForceFlush | boolean | Menentukan apakah refresh paksa diaktifkan untuk setiap pemanggilan metode addLog. Nilai valid: true: Kami menyarankan agar Anda tidak mengaktifkan refresh paksa karena dapat menurunkan performa sistem. false (default): Jika bisnis Anda memerlukan keandalan tinggi, kami menyarankan agar Anda mengaktifkan refresh paksa. |
persistentFilePath | string | Jalur cache untuk log biner saat Anda mengaktifkan unggah yang dapat dilanjutkan. Nilai default: string kosong. Penting Pastikan jalur tersebut tersedia. Tentukan jalur berbeda untuk setiap instans AliyunLogDartSdk. |
persistentMaxFileCount | int | Jumlah maksimum file persisten. Nilai default: 10. |
persistentMaxFileSize | int | Ukuran maksimum setiap file persisten. Satuan: byte. Nilai default: 1024 * 1024. |
persistentMaxLogCount | int | Jumlah maksimum log yang dapat di-cache. Nilai default: 64 * 1024. |
Kode kesalahan
Kode kesalahan | Deskripsi | Solusi |
invalid | SDK telah dihapus atau tidak valid. |
|
writeError | Terjadi kesalahan penulisan data karena trafik penulisan project telah mencapai batas atas. | Sesuaikan batas atas trafik penulisan untuk project tersebut. Untuk informasi selengkapnya, lihat Sesuaikan kuota sumber daya. |
dropError | Cache penuh. | Ubah parameter maxBufferLimit, persistentMaxLogCount, dan persistentMaxFileSize, lalu coba lagi. Anda dapat mengubah parameter tersebut sesuai petunjuk dalam bagian "Konfigurasikan parameter dalam kelas |
sendNetworkError | Terjadi kesalahan jaringan. | Periksa koneksi jaringan dan coba lagi. |
sendQuotaError | Trafik penulisan project telah mencapai batas atas. | Sesuaikan batas atas trafik penulisan untuk project tersebut. Untuk informasi selengkapnya, lihat Sesuaikan kuota sumber daya. |
sendUnauthorized | AccessKey telah kedaluwarsa atau tidak valid, atau kebijakan izin Pengguna RAM yang terkait dengan pasangan AccessKey tersebut dikonfigurasi secara salah. | Periksa pasangan AccessKey tersebut. Pastikan Pengguna RAM memiliki izin management atas resource Simple Log Service. Untuk informasi selengkapnya, lihat Langkah 2: Berikan izin kepada Pengguna RAM. |
sendServerError | Terjadi kesalahan layanan. | Kirim ticket untuk menghubungi dukungan teknis. |
sendDiscardError | Data dibuang. Umumnya, kesalahan ini disebabkan oleh ketidakkonsistenan antara waktu perangkat dan waktu server. | SDK secara otomatis mengirim ulang data tersebut. |
sendTimeError | Waktu perangkat tidak tersinkronisasi dengan waktu server. | SDK secara otomatis memperbaiki kesalahan ini. |
sendExitBuffered | Saat SDK dihapus, data yang di-cache belum sempat dikirim. | Kami menyarankan agar Anda mengaktifkan unggah yang dapat dilanjutkan untuk mencegah kehilangan data. |
parametersInvalid | Terjadi kesalahan parameter saat inisialisasi SDK. | Periksa pengaturan parameter seperti AccessKey, Endpoint, Project, dan Logstore. |
persistentError | Gagal menulis data yang di-cache ke disk sistem. | 1. Periksa apakah jalur file cache dikonfigurasi dengan benar. 2. Periksa apakah file cache penuh. 3. Periksa apakah ruang disk sistem mencukupi. |
unknown | Terjadi kesalahan yang tidak diketahui. | Coba lagi nanti. Jika kesalahan tetap berlanjut, submit a ticket untuk menghubungi dukungan teknis. |