ロギングの設定
Amplify Logger により、アプリの問題をトラブルシューティングおよびデバッグしてカスタマーに最高のエクスペリエンスを提供できます。Amplify ライブラリによるエラーメッセージをログに記録し、カスタムログを追加して Amazon CloudWatch に送信できます。Amplify Logger を使用すると、ロギング構成をリモートで変更してロギングレベルを調整したり、カスタマー ID の許可リストを追加して、本番環境でのアプリの問題をより詳細に検出できます。
前提条件
- Android SDK API レベル 24(Android 7.0)以上をターゲットとし、Amplify ライブラリが統合された Android アプリケーション
- 完全な例については、クイックスタートに従ってください。
- Amplify Logger は Amplify Android SDK バージョン 2.11.0 以降で利用可能です
Amplify ライブラリのインストール
Gradle Scripts を展開し、build.gradle (Module: app) を開きます。クイックスタートガイドの手順に従って、Amplify の構成はすでに完了しています。
これらのライブラリを dependencies ブロックに追加します:
android { compileOptions { // Support for modern Java features isCoreLibraryDesugaringEnabled = true }}
dependencies { // Amplify API dependencies implementation("com.amplifyframework:aws-auth-cognito:ANDROID_VERSION") implementation("com.amplifyframework:aws-logging-cloudwatch:ANDROID_VERSION") // ... other dependencies coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:ANDROID_DESUGAR_VERSION")}aws-auth-cognito は Amazon CloudWatch への認証を提供するために使用されます。
Sync Now をクリックします。
バックエンドの設定
ログを送信するために Amazon CloudWatch にロググループを作成する必要があります。AWS Console を使用してロググループを手動で作成することも、Amplify と AWS CDK を使用して AWS リソースをプロビジョニングおよびデプロイすることもできます。
以下は、Amazon CloudWatch ロググループを作成し、Amplify ロールへの権限ポリシーを作成および割り当てるサンプル CDK コンストラクトです。
CDK コンストラクトで構成された <log-group-name> と <region> は、後で Amplify Logger プラグインを初期化するときに使用されます。
プレースホルダー値を独自の値に置き換えてください:
<log-group-name>はログが送信されるロググループです。このサンプル CDK コンストラクトには、前のステップで既に作成した可能性がある CloudWatch ロググループを作成するロジックが含まれていることに注意してください。<amplify-authenticated-role-name>と<amplify-unauthenticated-role-name>は、Amplify CLI を使用した Amplify Auth 構成の一部として作成された Amplify ロールです。
import * as path from "node:path"import * as cdk from "aws-cdk-lib"import * as logs from "aws-cdk-lib/aws-logs"import * as iam from "aws-cdk-lib/aws-iam"import { Construct } from "constructs"
export class RemoteLoggingConstraintsConstruct extends Construct { constructor(scope: Construct, id: string, props: RemoteLoggingConstraintProps) { super(scope, id)
const region = cdk.Stack.of(this).region const account = cdk.Stack.of(this).account const logGroupName = <log-group-name> const authRoleName = <amplify-authenticated-role-name> const unAuthRoleName = <amplify-unauthenticated-role-name>
new logs.LogGroup(this, 'Log Group', { logGroupName: logGroupName, retention: logs.RetentionDays.INFINITE })
const authRole = iam.Role.fromRoleName(this, "Auth-Role", authRoleName) const unAuthRole = iam.Role.fromRoleName(this, "UnAuth-Role", unAuthRoleName) const logResource = `arn:aws:logs:${region}:${account}:log-group:${logGroupName}:log-stream:*` const logIAMPolicy = new iam.PolicyStatement({ effect: iam.Effect.ALLOW, resources: [logResource], actions: ["logs:PutLogEvents", "logs:DescribeLogStreams", "logs:CreateLogStream"] })
authRole.addToPrincipalPolicy(logIAMPolicy) unAuthRole.addToPrincipalPolicy(logIAMPolicy)
new cdk.CfnOutput(this, 'CloudWatchLogGroupName', { value: logGroupName }); new cdk.CfnOutput(this, 'CloudWatchRegion', { value: region }); }}<log-group-name> と <region> は、ターミナルに出力されます。この情報を使用して、次のセクションで Amplify ライブラリをセットアップできます。
Amplify ロギングの初期化
このセクションでは、Amplify ライブラリを初期化してセットアップします。Logger は、設定ファイルを使用するか、アプリの初期化時にコード内で構成できます。
モバイルアプリで、amplify_outputs.json ファイルと同じ場所に amplifyconfiguration_logging.json を作成して追加します。
<log-group-name> と <region> は、バックエンドリソースのプロビジョニングの一部として CDK コンストラクトで指定した値です。これらの値は、サンプル CDK コンストラクトをデプロイするときの出力ログの最後にも記載されています。構成ファイルは、ロギングプラグインが、どこに、いつ、どのログを送信するかを知るためのデータソースです。以下の例は、ロギングプラグインをすべてのログをログレベル ERROR で 60 秒間隔で自動的に送信し、ローカルに最大 1MB まで保存するように構成しています。
{ "awsCloudWatchLoggingPlugin": { "enable": true, "logGroupName": "<log-group-name>", "region": "<region>", "localStoreMaxSizeInMB": 1, "flushIntervalInSeconds": 60, "loggingConstraints": { "defaultLogLevel": "ERROR" } }}Amplify Logger と Amplify Auth カテゴリをアプリで使用するには、Amplify.addPlugin() と Amplify.configure() メソッドを呼び出して、対応するプラグインを作成および構成する必要があります。
メインの Application ファイルの先頭に次のインポートを追加します:
import com.amplifyframework.auth.cognito.AWSCognitoAuthPlugin;import com.amplifyframework.core.Amplify;import com.amplifyframework.core.configuration.AmplifyOutputs;import com.amplifyframework.logging.cloudwatch.AWSCloudWatchLoggingPlugin;Amplify.addPlugin(new AWSCognitoAuthPlugin());Amplify.addPlugin(new AWSCloudWatchLoggingPlugin());クラスは次のようになります:
public class MyAmplifyApp extends Application { @Override public void onCreate() { super.onCreate();
try { // Add these lines to add the AWSCognitoAuthPlugin and AWSCloudWatchLoggingPlugin plugins Amplify.addPlugin(new AWSCognitoAuthPlugin()); Amplify.addPlugin(new AWSCloudWatchLoggingPlugin()); Amplify.configure(AmplifyOutputs.fromResource(R.raw.amplify_outputs), getApplicationContext());
Log.i("MyAmplifyApp", "Initialized Amplify"); } catch (AmplifyException error) { Log.e("MyAmplifyApp", "Could not initialize Amplify", error); } }}import com.amplifyframework.auth.cognito.AWSCognitoAuthPluginimport com.amplifyframework.core.Amplifyimport com.amplifyframework.core.configuration.AmplifyOutputsimport com.amplifyframework.logging.cloudwatch.AWSCloudWatchLoggingPluginアプリケーションクラスの onCreate() メソッドに次のコードを追加します。Amplify がロギングプラグインを初期化するとき、アプリにバンドルされている amplifyconfiguration_logging.json の構成を自動的に見つけてロードします。
Amplify.addPlugin(AWSCognitoAuthPlugin())Amplify.addPlugin(AWSCloudWatchLoggingPlugin())クラスは次のようになります:
class MyAmplifyApp : Application() { override fun onCreate() { super.onCreate()
try { // Add these lines to add the AWSCognitoAuthPlugin and AWSCloudWatchLoggingPlugin plugins Amplify.addPlugin(AWSCognitoAuthPlugin()) Amplify.addPlugin(AWSCloudWatchLoggingPlugin()) Amplify.configure(AmplifyOutputs.fromResource(R.raw.amplify_outputs), applicationContext)
Log.i("MyAmplifyApp", "Initialized Amplify") } catch (error: AmplifyException) { Log.e("MyAmplifyApp", "Could not initialize Amplify", error) } }}import com.amplifyframework.auth.cognito.AWSCognitoAuthPlugin;import com.amplifyframework.core.configuration.AmplifyOutputs;import com.amplifyframework.rx.RxAmplify;import com.amplifyframework.logging.cloudwatch.AWSCloudWatchLoggingPlugin;RxAmplify.addPlugin(new AWSCognitoAuthPlugin());RxAmplify.addPlugin(new AWSCloudWatchLoggingPlugin());クラスは次のようになります:
public class MyAmplifyApp extends Application { @Override public void onCreate() { super.onCreate();
try { // Add these lines to add the AWSCognitoAuthPlugin and AWSCloudWatchLoggingPlugin plugins RxAmplify.addPlugin(new AWSCognitoAuthPlugin()); RxAmplify.addPlugin(new AWSCloudWatchLoggingPlugin()); RxAmplify.configure(AmplifyOutputs.fromResource(R.raw.amplify_outputs), getApplicationContext());
Log.i("MyAmplifyApp", "Initialized Amplify"); } catch (AmplifyException error) { Log.e("MyAmplifyApp", "Could not initialize Amplify", error); } }}Amplify Logger と Amplify Auth カテゴリをアプリで使用するには、Amplify.addPlugin() と Amplify.configure() メソッドを呼び出して、対応するプラグインを作成および構成する必要があります。
メインの Application ファイルの先頭に次のインポートを追加します:
import com.amplifyframework.auth.cognito.AWSCognitoAuthPlugin;import com.amplifyframework.core.Amplify;import com.amplifyframework.core.configuration.AmplifyOutputs;import com.amplifyframework.logging.cloudwatch.AWSCloudWatchLoggingPlugin;その初期化子に次のコードを追加します。初期化子がない場合は、デフォルトを作成できます。<log-group-name> と <region> は、バックエンドリソースのプロビジョニングの一部として CDK コンストラクトで指定した値です。これらの値は、サンプル CDK コンストラクトをデプロイするときの出力ログの最後にも記載されています。
以下の例は、ロギングプラグインをすべてのログをログレベル ERROR で 60 秒間隔で自動的に送信し、ローカルに最大 1MB まで保存するように構成しています。
Amplify.addPlugin(new AWSCognitoAuthPlugin());AWSCloudWatchLoggingPluginConfiguration config = new AWSCloudWatchLoggingPluginConfiguration (<log-group-name>,<region>,1, 60);Amplify.addPlugin(new AWSCloudWatchLoggingPlugin(config));クラスは次のようになります:
public class MyAmplifyApp extends Application { @Override public void onCreate() { super.onCreate();
try { // Add these lines to add the AWSCognitoAuthPlugin and AWSCloudWatchLoggingPlugin plugins Amplify.addPlugin(new AWSCognitoAuthPlugin()); AWSCloudWatchLoggingPluginConfiguration config = new AWSCloudWatchLoggingPluginConfiguration (<log-group-name>,<region>,1,60); Amplify.addPlugin(new AWSCloudWatchLoggingPlugin(config)); Amplify.configure(AmplifyOutputs.fromResource(R.raw.amplify_outputs), getApplicationContext());
Log.i("MyAmplifyApp", "Initialized Amplify"); } catch (AmplifyException error) { Log.e("MyAmplifyApp", "Could not initialize Amplify", error); } }}import com.amplifyframework.core.Amplifyimport com.amplifyframework.core.configuration.AmplifyOutputsimport com.amplifyframework.auth.cognito.AWSCognitoAuthPluginimport com.amplifyframework.logging.cloudwatch.AWSCloudWatchLoggingPluginアプリケーションクラスの onCreate() メソッドに次のコードを追加します。
Amplify.addPlugin(AWSCognitoAuthPlugin())val config = AWSCloudWatchLoggingPluginConfiguration(logGroupName = <log-group-name>, region = <region>, localStoreMaxSizeInMB = 1, flushIntervalInSeconds = 60)Amplify.addPlugin(AWSCloudWatchLoggingPlugin(config))クラスは次のようになります:
class MyAmplifyApp : Application() { override fun onCreate() { super.onCreate()
try { // Add these lines to add the AWSCognitoAuthPlugin and AWSCloudWatchLoggingPlugin plugins Amplify.addPlugin(AWSCognitoAuthPlugin()) val config = AWSCloudWatchLoggingPluginConfiguration(logGroupName = <log-group-name>, region = <region>, localStoreMaxSizeInMB = 1, flushIntervalInSeconds = 60) Amplify.addPlugin(AWSCloudWatchLoggingPlugin(config)) Amplify.configure(AmplifyOutputs.fromResource(R.raw.amplify_outputs), applicationContext)
Log.i("MyAmplifyApp", "Initialized Amplify") } catch (error: AmplifyException) { Log.e("MyAmplifyApp", "Could not initialize Amplify", error) } }}import com.amplifyframework.auth.cognito.AWSCognitoAuthPlugin;import com.amplifyframework.core.configuration.AmplifyOutputs;import com.amplifyframework.rx.RxAmplify;import com.amplifyframework.logging.cloudwatch.AWSCloudWatchLoggingPlugin;RxAmplify.addPlugin(new AWSCognitoAuthPlugin());AWSCloudWatchLoggingPluginConfiguration config = new AWSCloudWatchLoggingPluginConfiguration (<log-group-name>,<region>, 1,60);RxAmplify.addPlugin(new AWSCloudWatchLoggingPlugin(config));クラスは次のようになります:
public class MyAmplifyApp extends Application { @Override public void onCreate() { super.onCreate();
try { // Add these lines to add the AWSCognitoAuthPlugin and AWSCloudWatchLoggingPlugin plugins RxAmplify.addPlugin(new AWSCognitoAuthPlugin()); AWSCloudWatchLoggingPluginConfiguration config = new AWSCloudWatchLoggingPluginConfiguration (<log-group-name>,<region>,1,60); RxAmplify.addPlugin(new AWSCloudWatchLoggingPlugin(config)); RxAmplify.configure(AmplifyOutputs.fromResource(R.raw.amplify_outputs), getApplicationContext());
Log.i("MyAmplifyApp", "Initialized Amplify"); } catch (AmplifyException error) { Log.e("MyAmplifyApp", "Could not initialize Amplify", error); } }}