ロギングの設定
Amplify Logger により、アプリの問題をトラブルシューティングおよびデバッグしてカスタマーに最高のエクスペリエンスを提供できます。Amplify ライブラリによるエラーメッセージをログに記録し、カスタムログを追加して Amazon CloudWatch に送信できます。Amplify Logger を使用すると、ロギング構成をリモートで変更してロギングレベルを調整したり、カスタマー ID の許可リストを追加して、本番環境でのアプリの問題をより詳細に検出できます。
前提条件
Amplify ライブラリが統合されたアプリケーション、および以下のいずれかの最小ターゲット:
- iOS 13.0、Xcode 14.1 以降を使用
- macOS 10.15、Xcode 14.1 以降を使用
- tvOS 13.0、Xcode 14.3 以降を使用
- watchOS 9.0、Xcode 14.3 以降を使用
- visionOS 1.0、Xcode 15 beta 2 以降を使用(プレビューサポート - 詳細は以下を参照してください)
完全な例については、モバイルサポートウォークスルーに従ってください。
バックエンドの設定
ログを送信するために 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 を作成して追加します。ファイルが Copy Bundle Resources ビルドフェーズに含まれていることを確認してください。
<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.add(plugin:) と Amplify.configure() メソッドを呼び出して、対応するプラグインを作成および構成する必要があります。
メインの App ファイルの先頭に次のインポートを追加します:
import Amplifyimport AWSCognitoAuthPluginimport AWSCloudWatchLoggingPluginその初期化子に次のコードを追加します。初期化子がない場合は、デフォルトの init を作成できます。Amplify がロギングプラグインを初期化するとき、アプリにバンドルされている amplifyconfiguration_logging.json の構成を自動的に見つけてロードします。
init() { do { try Amplify.add(plugin: AWSCognitoAuthPlugin()) try Amplify.add(plugin: AWSCloudWatchLoggingPlugin()) try Amplify.configure(with: .amplifyOutputs) } catch { assert(false, "Error initializing Amplify: \(error)") }}Amplify Logger と Amplify Auth カテゴリをアプリで使用するには、Amplify.add(plugin:) と Amplify.configure() メソッドを呼び出して、対応するプラグインを作成および構成する必要があります。
メインの App ファイルの先頭に次のインポートを追加します:
import Amplifyimport AWSCognitoAuthPluginimport AWSCloudWatchLoggingPluginその初期化子に次のコードを追加します。初期化子がない場合は、デフォルトの init を作成できます。<log-group-name> と <region> は、バックエンドリソースのプロビジョニングの一部として CDK コンストラクトで指定した値です。これらの値は、サンプル CDK コンストラクトをデプロイするときの出力ログの最後にも記載されています。
以下の例は、ロギングプラグインをすべてのログをログレベル ERROR で 60 秒間隔で自動的に送信し、ローカルに最大 1MB まで保存するように構成しています。
init() { do { let loggingConfiguration = AWSCloudWatchLoggingPluginConfiguration(logGroupName: "<log-group-name>", region: "<region>", localStoreMaxSizeInMB: 1, flushIntervalInSeconds: 60) let loggingPlugin = AWSCloudWatchLoggingPlugin(loggingPluginConfiguration: loggingConfiguration) try Amplify.add(plugin: loggingPlugin) try Amplify.configure(with: .amplifyOutputs) } catch { assert(false, "Error initializing Amplify: \(error)") }}