AWS SDK for Java 通話のログ記録 - AWS SDK for Java 1.x

end-of-support の今後の AWS SDK for Java (v1) を発表しましたAWS SDK for Java v2 に移行することをお勧めします。日付、その他の詳細、移行方法については、リンク先の発表内容を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS SDK for Java 通話のログ記録

AWS SDK for Java は Apache Commons Logging で計測されます。これは、実行時に複数のログ記録システムのいずれかを使用できるようにする抽象化レイヤーです。

サポートされるログ記録システムには、Java ロギング フレームワークや Apache Log4j などがあります。このトピックでは Log4j の使用方法を示します。SDK のログ記録機能は、アプリケーションコードを変更せずに使用できます。

Log4j の詳細については、Apache ウェブサイトを参照してください。

注記

このトピックでは、Log4j 1.x について説明します。Log4j2 は Apache Commons のログ記録を直接サポートしませんが、Apache Commons ログ記録インターフェイスを使用して Log4j2 にログ記録呼び出しを自動的にダイレクトするアダプターを提供します。詳細については、Log4j2 のドキュメントの「Commons Logging Bridge」を参照してください。

Log4J JAR のダウンロード

SDK で Log4j を使用するには、Apache ウェブサイトで Log4j JAR をダウンロードする必要があります。SDK に JAR は含まれていません。クラスパス上の場所に JAR ファイルをコピーします。

Log4j では、設定ファイル log4j.properties を使用します。設定ファイルの例を次に示します。クラスパス上のディレクトリに、この設定ファイルをコピーします。Log4j JAR と log4j.properties ファイルは、同じディレクトリに配置しないでください。

log4j.properties 設定ファイルは、ログ記録レベル、ログ記録出力の送信先 (たとえばファイルやコンソール)、出力形式などのプロパティを指定します。ログ記録レベルは、ロガーによって生成される出力の詳細度です。Log4j では、複数のログ記録階層の概念をサポートしています。ログ記録レベルは、階層ごとに個別に設定されます。次の 2 つのログ記録階層が AWS SDK for Javaで使用できます。

  • log4j.logger.com.amazonaws

  • log4j.logger.org.apache.http.wire

クラスパスの設定

Log4j JAR および log4j.properties ファイルは、クラスパス上に配置する必要があります。Apache Ant を使用している場合は、Ant ファイルの path 要素でクラスパスを設定します。以下の例では、SDK に含まれている Amazon S3 サンプル用の Ant ファイルにある path 要素を示します。

<path id="aws.java.sdk.classpath"> <fileset dir="../../third-party" includes="**/*.jar"/> <fileset dir="../../lib" includes="**/*.jar"/> <pathelement location="."/> </path>

Eclipse IDE を使用している場合は、メニューを開き、[Project (プロジェクト)] | [Properties (プロパティ)] | [Java Build Path] に移動して、クラスパスを設定します。

サービス固有のエラーと警告

クライアントライブラリからの重要なメッセージを取得するために、"com.amazonaws" ロガー階層は必ず "WARN" に設定しておくことをお勧めします。例えば、 Amazon S3 クライアントがアプリケーションが適切に を閉じておらずInputStream、リソースがリークしている可能性があることを検出した場合、S3 クライアントは警告メッセージを通じてログに報告します。これにより、リクエストやレスポンスの処理でクライアントに問題が発生した場合、メッセージが必ずログに記録されます。

次の log4j.properties ファイルでは、rootLogger が WARN に設定されています。これにより、"com.amazonaws" 階層のすべてのロガーで生成された警告とエラーメッセージが取り込まれます。また、com.amazonaws ロガーを WARN に明示的に設定することもできます。

log4j.rootLogger=WARN, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n # Or you can explicitly enable WARN and ERROR messages for the {AWS} Java clients log4j.logger.com.amazonaws=WARN

リクエストおよびレスポンスの概要のログ記録

へのすべてのリクエストは、 AWS のサービス が AWS リクエストをどのように処理しているかという問題が発生した場合に便利な一意のリクエスト ID AWS のサービス を生成します。 AWS リクエスト IDs は、失敗したサービス呼び出しに対して SDK の例外オブジェクトを介してプログラムでアクセスでき、「com.amazonaws.request」ロガーの DEBUG ログレベルを通じて報告することもできます。

次の log4j.properties ファイルは、リクエスト IDsを含む AWS リクエストとレスポンスの概要を有効にします。

log4j.rootLogger=WARN, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n # Turn on DEBUG logging in com.amazonaws.request to log # a summary of requests/responses with {AWS} request IDs log4j.logger.com.amazonaws.request=DEBUG

ログ出力の例を次に示します。

2009-12-17 09:53:04,269 [main] DEBUG com.amazonaws.request - Sending Request: POST https://rds.amazonaws.com / Parameters: (MaxRecords: 20, Action: DescribeEngineDefaultParameters, SignatureMethod: HmacSHA256, AWSAccessKeyId: ACCESSKEYID, Version: 2009-10-16, SignatureVersion: 2, Engine: mysql5.1, Timestamp: 2009-12-17T17:53:04.267Z, Signature: q963XH63Lcovl5Rr71APlzlye99rmWwT9DfuQaNznkD, ) 2009-12-17 09:53:04,464 [main] DEBUG com.amazonaws.request - Received successful response: 200, {AWS} Request ID: 694d1242-cee0-c85e-f31f-5dab1ea18bc6 2009-12-17 09:53:04,469 [main] DEBUG com.amazonaws.request - Sending Request: POST https://rds.amazonaws.com / Parameters: (ResetAllParameters: true, Action: ResetDBParameterGroup, SignatureMethod: HmacSHA256, DBParameterGroupName: java-integ-test-param-group-0000000000000, AWSAccessKeyId: ACCESSKEYID, Version: 2009-10-16, SignatureVersion: 2, Timestamp: 2009-12-17T17:53:04.467Z, Signature: 9WcgfPwTobvLVcpyhbrdN7P7l3uH0oviYQ4yZ+TQjsQ=, ) 2009-12-17 09:53:04,646 [main] DEBUG com.amazonaws.request - Received successful response: 200, {AWS} Request ID: 694d1242-cee0-c85e-f31f-5dab1ea18bc6

詳細なワイヤログ記録

場合によっては、 が AWS SDK for Java 送受信する正確なリクエストとレスポンスを確認すると便利です。大きなリクエスト ( にアップロードされるファイルなど Amazon S3) を書き出すと、レスポンスによってアプリケーションが大幅に遅くなる可能性があるため、本番システムでこのログ記録を有効にしないでください。この情報に本当にアクセスする必要がある場合は、Apache HttpClient 4 ロガーを使用して一時的に有効にできます。org.apache.http.wire ロガーの DEBUG レベルを有効にすると、すべてのリクエストデータとレスポンスデータに対するログ記録が有効になります。

次の log4j.properties ファイルは、Apache HttpClient 4 でのフルワイヤログ記録をオンにします。アプリケーションのパフォーマンスに大きな影響を与える可能性があるため、一時的にのみオンにする必要があります。

log4j.rootLogger=WARN, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n # Log all HTTP content (headers, parameters, content, etc) for # all requests and responses. Use caution with this since it can # be very expensive to log such verbose data! log4j.logger.org.apache.http.wire=DEBUG

レイテンシーメトリクスのログ記録

トラブルシューティングを行っていて、処理に最も時間がかかっているプロセスを示すメトリクスや、サーバー側またはクライアント側のどちらに大きなレイテンシーが発生しているかを示すメトリクスなどを確認する場合、レイテンシーロガーが役立ちます。このロガーを有効にするには、com.amazonaws.latency ロガーを DEBUG に設定します。

注記

このロガーは、SDK メトリクスが有効な場合のにみ使用できます。SDK メトリクスパッケージの詳細については、「Enabling Metrics for the AWS SDK for Java」を参照してください。

log4j.rootLogger=WARN, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n log4j.logger.com.amazonaws.latency=DEBUG

ログ出力の例を次に示します。

com.amazonaws.latency - ServiceName=[{S3}], StatusCode=[200], ServiceEndpoint=[https://list-objects-integ-test-test.s3.amazonaws.com], RequestType=[ListObjectsV2Request], AWSRequestID=[REQUESTID], HttpClientPoolPendingCount=0, RetryCapacityConsumed=0, HttpClientPoolAvailableCount=0, RequestCount=1, HttpClientPoolLeasedCount=0, ResponseProcessingTime=[52.154], ClientExecuteTime=[487.041], HttpClientSendRequestTime=[192.931], HttpRequestTime=[431.652], RequestSigningTime=[0.357], CredentialsRequestTime=[0.011, 0.001], HttpClientReceiveResponseTime=[146.272]