All Products
Search
Document Center

Simple Log Service:Panduan cepat SDK Flutter

Last Updated:Mar 22, 2026

Kumpulkan dan kirim log dari aplikasi Flutter ke Simple Log Service (SLS) menggunakan SLS Flutter SDK. SDK ini mendukung Android 4.0 atau versi lebih baru serta iOS 10.0 atau versi lebih baru, dengan fitur-fitur seperti resumable upload, konfigurasi dinamis, dan callback log.

Catatan rilis

SLS Flutter SDK dipublikasikan di repositori paket Dart resmi. Untuk informasi selengkapnya, lihat Aliyun Log Flutter Release.

Kode contoh

Untuk contoh lengkap yang berfungsi, lihat Aliyun Log Flutter SDK Example.

Prasyarat

  • Instal lingkungan pengembangan Flutter.

  • SLS Flutter SDK mendukung Android 4.0 atau versi lebih baru serta iOS 10.0 atau versi lebih baru.

    • Untuk build iOS, Anda harus menambahkan baris berikut ke Podfile Anda:

      source 'https://github.com/CocoaPods/Specs.git'
      source 'https://github.com/aliyun-sls/Specs.git'
      # Jika Anda menggunakan repositori di wilayah Tiongkok Daratan, Anda juga harus menambahkan baris ini.
      source 'https://gitee.com/aliyun-sls/Specs.git'

Prosedur

Langkah 1: Instal SDK

  1. Buat proyek Flutter.

  2. Tambahkan modul SLS Flutter SDK. Dari direktori root proyek Anda, jalankan perintah berikut:

    flutter pub add aliyun_log_dart_sdk

    Setelah proses selesai, informasi berikut secara otomatis ditambahkan ke file pubspec.yaml proyek, dan perintah flutter pub get dijalankan secara implisit.

    dependencies:
     aliyun_log_dart_sdk: ^1.0.0 // Untuk informasi versi lainnya, lihat ikhtisar SDK Flutter.
  3. Impor paket tersebut di file Dart Anda.

    import 'package:aliyun_log_dart_sdk/aliyun_log_dart_sdk.dart';

Langkah 2: Inisialisasi SDK

Kode berikut menunjukkan inisialisasi dasar. Untuk opsi konfigurasi lanjutan seperti ukuran paket log dan resumable upload, lihat Parameter konfigurasi.

import 'package:aliyun_log_dart_sdk/aliyun_log_dart_sdk.dart';

AliyunLogDartSdk? _aliyunLogSdk;

void _initProducer() async {
  // Tetapkan endpoint, nama project, dan nama Logstore.
    LogProducerConfiguration configuration = LogProducerConfiguration(
      endpoint: 'your endpoint', project: 'your project', logstore: 'your logstore'
    ); 
  // AccessKey Alibaba Cloud. Menggunakan pasangan AccessKey berisiko karena memberikan akses penuh ke resource Anda. Kami sangat menyarankan untuk menggunakan RAM User dalam pemanggilan API.
    configuration.accessKeyId = 'your access key id';
    configuration.accessKeySecret = 'your access key secret';
    configuration.securityToken = 'your access key token'; // Hanya diperlukan saat menggunakan AccessKey temporary dari Security Token Service (STS).
    _aliyunLogSdk = AliyunLogDartSdk();
    LogProducerResult result = await _aliyunLogSdk!.initProducer(configuration);
}

Langkah 3: Kirim log

Panggil 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 content'
});

Log berhasil dikirim hanya jika code == LogProducerResult.ok. Jika tidak, kode kesalahan akan dikembalikan. Untuk informasi selengkapnya, lihat Kode kesalahan.

Langkah 4: Konfigurasi aturan obfuscation (Android)

Jika proyek Flutter Anda memiliki aturan obfuscation yang diaktifkan (aturan ini diaktifkan secara default pada Flutter v1.16.2 dan versi lebih baru), Anda juga perlu menambahkan aturan berikut ke file konfigurasi obfuscation proyek Anda. Jika tidak, proyek Android mungkin tidak berjalan dengan benar. Proyek iOS tidak terpengaruh oleh aturan ini.

-keep class com.aliyun.sls.android.producer.* { *; }
-keep interface com.aliyun.sls.android.producer.* { *; }

Konfigurasi dinamis

Parameter berikut dapat diperbarui saat runtime: Endpoint, Project, Logstore, dan AccessKey.

  • Perbarui Endpoint, Project, dan Logstore.

    await _aliyunLogSdk!.setEndpoint('new-endpoint');
    await _aliyunLogSdk!.setProject('new-project-name');
    await _aliyunLogSdk!.setLogstore('new-logstore-name');
  • Perbarui AccessKey.

    // securityToken bersifat opsional. Hanya diperlukan saat AccessKey diperoleh melalui Security Token Service (STS).
    await _aliyunLogSdk!.setAccessKey('your accesskey id', 'your accesskey secret', securityToken: 'your accesskey token');
  • Perbarui parameter source, topic, dan tag.

    await _aliyunLogSdk!.setSource('flutter');
    await _aliyunLogSdk!.setTopic('flutter-test');
    await _aliyunLogSdk!.addTag('tag1', 'value1');
    await _aliyunLogSdk!.addTag('tag2', 'value2');
  • Perbarui parameter lainnya.

    Penting

    AliyunLogDartSdk.updateConfiguration() tidak mendukung pembaruan parameter resumable upload saat runtime.

    LogProducerConfiguration configuration = LogProducerConfiguration();
    configuration.dropDelayLog = true;
    configuration.dropUnauthorizedLog = true;
    // Parameter lain dari kelas LogProducerConfiguration juga dapat diatur dengan cara ini.
    await _aliyunLogSdk!.updateConfiguration(configuration);

Tetapkan callback log

Tetapkan callback untuk operasi pengiriman log. Callback ini dipicu baik saat sukses maupun gagal, memungkinkan pemantauan status SDK dan pembaruan konfigurasi.

_aliyunLogSdk!.setLogCallback((resultCode, errorMessage, logBytes, compressedBytes) {
	// Parameter tidak valid. Anda perlu memperbarui konfigurasi.
	if (LogProducerResult.parametersInvalid == resultCode) {
	// Misalnya, perbarui Endpoint.
	_aliyunLogSdk!.setEndpoint('your endpoint');
	// AccessKey yang hilang atau salah juga memicu parametersInvalid.
	_aliyunLogSdk!.setAccessKey('your access key id', 'your access key secret', securityToken: 'your token');
}

 	// Otorisasi telah kedaluwarsa. Anda perlu memperbarui AccessKey.
	if (LogProducerResult.sendUnauthorized == resultCode) {
		_aliyunLogSdk!.setAccessKey('your access key id', 'your access key secret', securityToken: 'your token');
	}
});

Mengaktifkan unggah yang dapat dilanjutkan

Penting

Untuk mengaktifkan fitur resumable upload, Anda harus mengaktifkannya saat menginisialisasi AliyunLogDartSdk. Anda tidak dapat mengubah konfigurasi resumable upload secara dinamis setelah SDK diinisialisasi.

Konfigurasikan resumable upload selama inisialisasi:

configuration.persistent = true; // Aktifkan resumable upload.
configuration.persistentFilePath = 'flutter/demo'; // Direktori untuk menyimpan cache binlog.
configuration.persistentForceFlush = false; // Nonaktifkan force flush. Biarkan dinonaktifkan karena mengaktifkannya dapat memengaruhi performa.
configuration.persistentMaxFileCount = 10; // Jumlah maksimum file cache. Default: 10.
configuration.persistentMaxFileSize = 1024 * 1024; // Ukuran maksimum satu file cache, dalam byte. Default: 1024 * 1024.
configuration.persistentMaxLogCount = 64 * 1024; // Jumlah maksimum log yang dicache. Default: 64 * 1024.
_aliyunLogSdk = AliyunLogDartSdk();
LogProducerResult result = await _aliyunLogSdk!.initProducer(configuration);

Parameter

Parameter yang didukung oleh kelas LogProducerConfiguration tercantum dalam tabel berikut.

Parameter

Tipe

Deskripsi

endpoint

string

Endpoint wilayah tempat project berada. Contoh: cn-hangzhou.log.aliyuncs.com. Untuk informasi selengkapnya, lihat Endpoint.

project

string

Nama Project. Untuk informasi selengkapnya, lihat Project.

logstore

string

Nama Logstore. Untuk informasi selengkapnya, lihat Logstore.

accessKeyId

string

ID AccessKey Anda. Untuk informasi selengkapnya, lihat Pasangan Kunci Akses.

accessKeySecret

string

Rahasia AccessKey Anda. Untuk informasi selengkapnya, lihat Pasangan Kunci Akses.

securityToken

string

Token keamanan yang diperlukan untuk autentikasi Security Token Service (STS). Untuk informasi selengkapnya, lihat AssumeRole.

debuggable

bool

Menentukan apakah Debug Mode diaktifkan. Default: false.

Aktifkan mode ini saat melakukan troubleshooting masalah pengumpulan log.

maxBufferLimit

int

Memori maksimum yang dapat digunakan SDK untuk caching. Satuan: byte. Default: 64 * 1024 * 1024.

connectTimeout

int

Waktu timeout koneksi jaringan, dalam detik. Default: 10. Jangan ubah nilai ini kecuali diperlukan.

sendTimeout

int

Waktu timeout pengiriman data, dalam detik. Default: 15. Jangan ubah nilai ini kecuali diperlukan.

ntpTimeOffset

int

Selisih antara waktu perangkat dan waktu standar, dalam detik. Default: 0. Jangan ubah nilai ini kecuali diperlukan, karena SDK secara otomatis mengoreksi waktu.

maxLogDelayTime

int

Selisih waktu maksimum yang diizinkan antara timestamp log dan waktu lokal perangkat. Satuan: detik. Default: 7 * 24 * 3600. Jika nilai ini terlampaui, log diproses berdasarkan parameter dropDelayLog. Jangan ubah nilai ini kecuali diperlukan.

dropDelayLog

bool

Menentukan kebijakan penanganan log yang melebihi maxLogDelayTime. Nilai default adalah false, artinya log tidak dibuang. Bidang __time__

diatur ulang ke waktu saat ini.

dropUnauthorizedLog

bool

Menentukan apakah log yang gagal autentikasi akan dibuang. Default: false.

source

string

__source__

Bidang yang menunjukkan sumber log. Nilai default: Android atau iOS.

topic

string

__topic__

, yang menunjukkan Topik Log. Tidak ada nilai default.

Tags (melalui metode addTag())

string

__tag__:xxx:yyy

Nilai bidang, yaitu metadata tag. Bidang ini tidak memiliki nilai default. Anda harus mengatur nilai ini dengan memanggil metode LogProducerConfiguration.addTag() atau AliyunLogDartSdk.addTag().

metode.

packetLogBytes

int

Ukuran setiap paket log yang akan dikirim. Nilai valid: 1 hingga 5.242.880. Satuan: byte. Default: 1024 * 1024.

packetLogCount

int

Jumlah maksimum log dalam setiap paket. Nilai valid: 1 hingga 4.096. Default: 1.024.

packetTimeout

int

Waktu timeout paket log. Jika timeout tercapai, paket langsung dikirim. Satuan: milidetik. Default: 3000.

persistent

boolean

Menentukan apakah fitur resumable upload diaktifkan. Default: false. Aktifkan fitur ini untuk mencegah kehilangan data.

persistentForceFlush

boolean

Menentukan apakah cache harus dipaksa flush setiap kali addLog dipanggil.

true: Diaktifkan. Mengaktifkan ini dapat memengaruhi performa.

false (Default): Dinonaktifkan.

Aktifkan fitur ini hanya dalam skenario yang memerlukan keandalan tinggi.

persistentFilePath

string

Jalur penyimpanan cache binlog untuk resumable upload. Default: string kosong.

Penting

Jalur yang ditentukan harus ada. Setiap instans AliyunLogDartSdk memerlukan jalur yang unik.

persistentMaxFileCount

int

Jumlah maksimum file persistent. Default: 10.

persistentMaxFileSize

int

Ukuran maksimum setiap file persistent, dalam byte. Default: 1024*1024.

persistentMaxLogCount

int

Jumlah maksimum log yang dapat dicache. Default: 64*1024.

Kode kesalahan

Kode kesalahan

Deskripsi

Solusi

invalid

SDK belum diinisialisasi atau telah dihapus.

Verifikasi bahwa SDK telah diinisialisasi dengan benar dan metode destroy() belum dipanggil.

writeError

Terjadi kesalahan penulisan, kemungkinan besar karena kuota traffic tulis Project telah terlampaui.

Sesuaikan kuota traffic tulis untuk Project tersebut. Untuk informasi selengkapnya, lihat Sesuaikan kuota sumber daya.

dropError

Cache penuh.

Lihat deskripsi parameter untuk kelas LogProducerConfiguration, sesuaikan nilai parameter maxBufferLimit, persistentMaxLogCount, dan persistentMaxFileSize, lalu coba lagi.

sendNetworkError

Kesalahan jaringan.

Periksa koneksi jaringan Anda dan coba lagi.

sendQuotaError

Traffic tulis Project telah mencapai batasnya.

Sesuaikan kuota traffic tulis untuk Project tersebut. Untuk informasi selengkapnya, lihat Sesuaikan kuota sumber daya.

sendUnauthorized

AccessKey telah kedaluwarsa, tidak valid, atau kebijakan izinnya salah.

Verifikasi bahwa AccessKey Anda valid dan Pengguna RAM terkait memiliki izin yang diperlukan pada resource SLS.

Untuk informasi selengkapnya, lihat Berikan izin kepada pengguna RAM.

sendServerError

Kesalahan server.

Coba lagi operasi tersebut.

sendDiscardError

Data dibuang. Biasanya disebabkan oleh ketidaksesuaian waktu antara perangkat dan server.

SDK secara otomatis mengirim ulang data tersebut. Tidak diperlukan tindakan apa pun.

sendTimeError

Waktu perangkat tidak tersinkronisasi dengan waktu server.

SDK secara otomatis menyelesaikan masalah ini. Tidak diperlukan tindakan apa pun.

sendExitBuffered

Data yang dicache tidak sempat dikirim sebelum SDK dihapus.

Aktifkan resumable upload untuk mencegah kehilangan data.

parametersInvalid

Parameter inisialisasi SDK tidak valid.

Periksa konfigurasi AccessKey, Endpoint, Project, dan Logstore.

persistentError

Gagal menulis data cache ke disk.

Verifikasi bahwa jalur file cache dikonfigurasi dengan benar, cache tidak penuh, dan tersedia ruang disk yang cukup.

unknown

Kesalahan tidak diketahui.

Coba lagi operasi tersebut.