このトピックでは、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エンドポイント。 例: |
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 |
dropUnauthorizedLog | bool | 認証に失敗したログを破棄するかどうかを指定します。 デフォルト値:false |
source | String | ログソース。 |
topic | String | ログトピック。 |
_タグ | String | タグメタデータ。 |
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が破棄または無効です。 |
|
writeError | プロジェクトの書き込みトラフィックが上限に達したため、データの書き込みエラーが発生しました。 | プロジェクトの書き込みトラフィックの上限を調整します。 詳細については、「リソースクォータの調整」をご参照ください。 |
dropError | キャッシュがいっぱいです。 | maxBufferLimit、persistentMaxLogCount、およびpersistentMaxFileSizeパラメーターを変更して、もう一度お試しください。 このトピックの「 |
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 | キャッシュされたデータのシステムディスクへの書き込みに失敗しました。 |
|
不明 | 不明なエラーが発生しました。 | しばらくしてからもう一度お試しください。 エラーが続く場合は、 チケットを起票し、テクニカルサポートまでお問い合わせください。 |