すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:Flutter用のSimple Log Service SDKの使用を開始する

最終更新日:Sep 05, 2024

このトピックでは、Simple Log Service SDK for Flutterを使用してログを収集する方法について説明します。

前提条件

Flutter用のSimple Log Service SDKがインストールされています。 詳細については、「Flutter用Simple Log Service SDKのインストール」をご参照ください。

SDKの初期化

一般的なシナリオでは、次のコードに基づいてSDKを初期化できます。 Simple log Serviceに送信する必要がある各ログパケットのサイズを指定し、再開可能なアップロード機能を有効にする場合は、LogProducerConfigurationクラスを設定できます。 詳細については、「LogProducerConfigurationクラスのパラメーターの設定」をご参照ください。

import 'package:aliyun_log_dart_sdk/aliyun_log_dart_sdk.dart';

AliyunLogDartSdk? _aliyunLogSdk;

void _initProducer() async {
  // Specify the Simple Log Service endpoint, project name, and Logstore name. You can dynamically configure the parameters. 
    LogProducerConfiguration configuration = LogProducerConfiguration(
      endpoint: 'your endpoint', project: 'your project', logstore: 'your logstore'
    ); 
  // The AccessKey pair that is used to access Simple Log Service. For more information, see AccessKey pair. The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in Simple Log Service is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
    configuration.accessKeyId = 'your access key id';
    configuration.accessKeySecret = 'your access key secret';
    configuration.securityToken = 'your access key token'; // Specify the Security Token Service (STS) token. This parameter is required only if you use STS to obtain a temporary AccessKey pair. 
    _aliyunLogSdk = AliyunLogDartSdk();
    LogProducerResult result = await _aliyunLogSdk!.initProducer(configuration);
}

SDKの初期化に必要な情報を取得する方法の詳細については、以下のトピックを参照してください。

レポートログ

addLogメソッドを使用して、カスタムビジネスログをレポートできます。

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

code == LogProducerResult.okが返された場合、ログが報告されます。 エラーコードが返された場合は、このトピックの [エラーコード] セクションに記載されている手順に従ってエラーをトラブルシューティングできます。

難読化ルール

Flutterプロジェクトで難読化が有効になっている場合は、次のルールをflutterプロジェクトの難読化構成ファイルに追加する必要があります。 そうしないと、Androidプロジェクトが期待どおりに実行されない場合があります。 デフォルトでは、Flutter V1.16.2以降で難読化が有効になっています。 iOSプロジェクトはルールの影響を受けません。

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

動的パラメーターの設定

Simple Log Service SDK for Flutterは、Endpoint、Project、Logstore、AccessKeyなどのパラメーターの動的設定をサポートしています。

  • Endpoint、Project、およびLogstoreパラメーターを動的に設定するために使用されるサンプルコード:

    await _aliyunLogSdk!.setEndpoint('new-endpoint');
    await _aliyunLogSdk!.setProject('new-project-name');
    await _aliyunLogSdk!.setLogstore('new-logstore-name');
  • AccessKeyパラメーターを動的に設定するために使用されるサンプルコード:

    // The SecurityToken parameter is optional. This parameter is required only if you use STS to obtain a temporary AccessKey pair. 
    await _aliyunLogSdk!.setAccessKey('your accesskey id', 'your accesskey secret', securityToken: 'your accesskey token');
  • Source、Topic、およびTagパラメーターを動的に設定するために使用されるサンプルコード:

    await _aliyunLogSdk!.setSource('flutter');
    await _aliyunLogSdk!.setTopic('flutter-test');
    await _aliyunLogSdk!.addTag('tag1', 'value1');
    await _aliyunLogSdk!.addTag('tag2', 'value2');
  • 他のパラメータを動的に設定するために使用されるサンプルコード:

    重要

    AliyunLogDartSdk.updateConfiguration() メソッドは、再開可能なアップロード関連パラメーターの動的設定をサポートしていません。

    LogProducerConfiguration configuration = LogProducerConfiguration();
    configuration.dropDelayLog = true;
    configuration.dropUnauthorizedLog = true;
    // You can dynamically configure the parameters in the LogProducerConfiguration class in the same manner. 
    await _aliyunLogSdk!.updateConfiguration(configuration);

ログ送信用のコールバックの設定

Simple Log Service SDK for Flutterは、ログ送信のコールバックをサポートしています。 ログが送信されるか、送信に失敗すると、コールバック情報が生成されます。 コールバック情報を使用して、SDKのステータスを表示したり、SDKのパラメーター設定を更新したりできます。

_aliyunLogSdk!.setLogCallback((resultCode, errorMessage, logBytes, compressedBytes) {
	// A parameter error occurs. You need to update parameter settings. 
	if (LogProducerResult.parametersInvalid == resultCode) {
	// For example, you can modify the Endpoint parameter. 
	_aliyunLogSdk!.setEndpoint('your endpoint');
	// A parametersInvalid error occurs. This is because no AccessKey pair is specified or the specified AccessKey pair is invalid. 
	_aliyunLogSdk!.setAccessKey('your access key id', 'your access key secret', securityToken: 'your token');
}

 	// An authorization timeout error occurs. You need to update your AccessKey pair. 
	if (LogProducerResult.sendUnauthorized == resultCode) {
		_aliyunLogSdk!.setAccessKey('your access key id', 'your access key secret', securityToken: 'your token');
	}
});

再開可能アップロードの有効化

重要

再開可能アップロード機能を有効にする場合は、AliyunLogDartSdkを初期化するときに機能を有効にする必要があります。 SDKの初期化後、再開可能アップロードに関連するパラメーターを動的に変更することはできません。

AliyunLogDartSdkが初期化されたときに再開可能なアップロードを有効にするために使用されるサンプルコード:

configuration.persistent = true; // Enable resumable upload. 
configuration.persistentFilePath = 'flutter/demo'; // The path to the cache of binary logs. 
configuration.persistentForceFlush = false; // Disable forceful refresh. We recommend that you disable forceful refresh because it deteriorates system performance. 
configuration.persistentMaxFileCount = 10; // The maximum number of files that can be cached. Default value: 10. 
configuration.persistentMaxFileSize = 1024 * 1024; // The maximum size of each cached file. Default value: 1024 * 1024. 
configuration.persistentMaxLogCount = 64 * 1024; // The maximum number of logs that can be cached. Default value: 64 * 1024. 
_aliyunLogSdk = AliyunLogDartSdk();
LogProducerResult result = await _aliyunLogSdk!.initProducer(configuration);

LogProducerConfigurationクラスでパラメーターを設定します。

次の表に、LogProducerConfigurationクラスで設定できるパラメーターを示します。

パラメーター

データ型

説明

endpoint

String

プロジェクトが存在するリージョンのSimple Log Serviceエンドポイント。 例: cn-hangzhou.log.aliyuncs.com。 エンドポイントの取得方法の詳細については、「エンドポイント」をご参照ください。

project

String

プロジェクトの名前。 詳細は、「プロジェクト」をご参照ください。

logstore

String

ログストアの名前 詳細は、「Logstore」をご参照ください。

accesskeyId

String

Simple Log Serviceへのアクセスに使用されるAccessKey ID。 AccessKey IDを取得する方法の詳細については、「AccessKeyペア」をご参照ください。

accessKeySecret

String

Simple Log Serviceへのアクセスに使用されるAccessKeyシークレット。 AccessKeyシークレットの取得方法の詳細については、「AccessKeyペア」をご参照ください。

securityToken

String

一時的なAccessKeyペアを取得するために使用されるSTSトークン。 STSを使用して一時的なAccessKeyペアを取得する場合は、このパラメーターを設定する必要があります。 STSトークンの取得方法の詳細については、「AssumeRole」をご参照ください。

デバッグ可能

bool

デバッグモードを有効にするかどうかを指定します。 デフォルト値:false

データ収集の問題が発生した場合は、デバッグモードを有効にすることを推奨します。

maxBufferLimit

int

使用可能な最大メモリ。 デフォルト値: 64*1024*1024。 単位:バイト

connectTimeout

int

ネットワーク接続のタイムアウト期間。 デフォルト値は 10 です。 単位は秒です。 デフォルト値のままにすることを推奨します。

sendTimeout

int

送信操作のタイムアウト期間。 デフォルト値: 15。 単位は秒です。 デフォルト値のままにすることを推奨します。

ntpTimeOffset

int

デバイス時間と標準時間の差。 デフォルト値:0 単位は秒です。 デフォルト値のままにすることを推奨します。 SDKは自動時間補正をサポートしています。

maxLogDelayTime

int

ログ時間とローカル時間の差。 デフォルト値 : 7 単位:日 この値を超えると、SDKはdropDelayLogパラメーターの設定に基づいて問題を解決します。 デフォルト値のままにすることを推奨します。

dropDelayLog

bool

ログ時刻とローカル時刻の差がmaxLogDelayTimeパラメーターの値を超えるログを破棄するかどうかを指定します。 デフォルト値:false __time__ フィールドの値が現在の時刻にリセットされます。

dropUnauthorizedLog

bool

認証に失敗したログを破棄するかどうかを指定します。 デフォルト値:false

source

String

ログソース。__source__ フィールドの値と同じです。 デフォルト値: AndroidまたはiOS。

topic

String

ログトピック。__topic__ フィールドの値と同じです。 デフォルト値は提供されません。

_タグ

String

タグメタデータ。__tag __: xxx:yyyフィールドの値と同じです。 デフォルト値は提供されません。 LogProducerConfiguration.addTag() またはAliyunLogDartSdk.addTag() メソッドを使用して、タグを追加できます。

packetLogBytes

int

送信する必要がある各ログパケットのサイズ。 有効な値: 1 ~ 5242880 単位:バイト デフォルト値: 1024*1024。

packetLogCount

int

送信する必要がある各ログパケットのログの最大数。 有効な値: 1 ~ 4096 デフォルト値: 1024。

packetTimeout

int

ログパケットのタイムアウト期間は、送信前に待機します。 ログパケットは、タイムアウト時に直ちに送信される。 既定値:3000。 単位:ミリ秒。

persistent

Boolean

再開可能アップロードを有効にするかどうかを指定します。 デフォルト値:false 再開可能アップロードを有効にすることを推奨します。

persistentForceFlush

Boolean

addLogメソッドの呼び出しごとに強制更新を有効にするかどうかを指定します。 有効な値:

true: システムのパフォーマンスが低下するため、強制更新を有効にしないことを推奨します。

false (デフォルト): ビジネスで高い信頼性が必要な場合は、強制更新を有効にすることを推奨します。

persistentFilePath

String

再開可能なアップロードを有効にしたときのバイナリログのキャッシュへのパス。 デフォルト値: 空の文字列。

重要

パスが存在することを確認してください。 AliyunLogDartSdkインスタンスごとに異なるパスを指定します。

persistentMaxFileCount

int

永続ファイルの最大数。 デフォルト値は 10 です。

persistentMaxFileSize

int

各永続ファイルの最大サイズ。 デフォルト値: 1024*1024。

persistentMaxLogCount

int

キャッシュできるログの最大数。 デフォルト値: 64*1024

エラーコード

エラーコード

説明

解決策

無効

SDKが破棄または無効です。

  1. SDKが初期化されているかどうかを確認します。

  2. destroy() メソッドが呼び出されているかどうかを確認します。

writeError

プロジェクトの書き込みトラフィックが上限に達したため、データの書き込みエラーが発生しました。

プロジェクトの書き込みトラフィックの上限を調整します。 詳細については、「リソースクォータの調整」をご参照ください。

dropError

キャッシュがいっぱいです。

maxBufferLimit、persistentMaxLogCount、およびpersistentMaxFileSizeパラメーターを変更して、もう一度お試しください。 このトピックの「LogProducerConfigurationクラスのパラメーターの設定」セクションに記載されている手順に従って、パラメーターを変更できます。

sendNetworkError

ネットワークエラーが発生しました。

ネットワーク接続を確認して、もう一度お試しください。

sendQuotaError

プロジェクトの書き込みトラフィックが上限に達しました。

プロジェクトの書き込みトラフィックの上限を調整します。 詳細については、「リソースクォータの調整」をご参照ください。

sendUnauthorized

AccessKeyの有効期限が切れているか無効であるか、AccessKeyペアが属するRAMユーザーの権限ポリシーが正しく設定されていません。

AccessKeyペアを確認します。

RAMユーザーがSimple Log Serviceリソースに対する管理権限を持っていることを確認します。 詳細については、「手順2: RAMユーザーに権限を付与する」をご参照ください。

sendServerError

サービスエラーが発生しました。

送信する テクニカルサポートに連絡するチケット

sendDiscardError

データは破棄される。 ほとんどの場合、エラーはデバイス時刻とサーバー時刻の不一致が原因です。

SDKは自動的にデータを再送信します。

sendTimeError

デバイス時刻がサーバー時刻と同期していません。

SDKは自動的にエラーを修正します。

sendExitBuffered

SDKが破棄されると、キャッシュされたデータは送信されません。

データの損失を防ぐため、再開可能なアップロードを有効にすることを推奨します。

parametersInvalid

SDKの初期化でパラメーターエラーが発生しました。

AccessKey、Endpoint、Project、Logstoreなどのパラメーターの設定を確認します。

persistentError

キャッシュされたデータのシステムディスクへの書き込みに失敗しました。

  1. キャッシュファイルパスが正しく設定されているかどうかを確認します。

  2. キャッシュファイルがいっぱいかどうかを確認します。

  3. システムのディスク容量が十分かどうかを確認します。

不明

不明なエラーが発生しました。

しばらくしてからもう一度お試しください。 エラーが続く場合は、 チケットを起票し、テクニカルサポートまでお問い合わせください。