

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

# ログ記録
<a name="logging"></a>

は、[SLF4J](https://www.slf4j.org/manual.html) 互換ロガーをテレメトリプロバイダー`LoggerProvider`のデフォルトとして AWS SDK for Kotlin 設定します。抽象化レイヤーである SLF4J では、実行時に複数のロギングシステムのいずれかを使用できます。サポートされているログ記録システムには、[Java ログ記録 APIs](https://docs.oracle.com/javase/8/docs/technotes/guides/logging/)、[Log4j 2](https://logging.apache.org/log4j/2.x/)、[および Logback](https://logback.qos.ch/) が含まれます。

**警告**  
デバッグの目的でのみワイヤログ記録を使用することをお勧めします。(ワイヤログ記録については以下で説明します）。E メールアドレス、セキュリティトークン、API キー、パスワード、 AWS Secrets Manager シークレットなどの機密データをログに記録する可能性があるため、本番環境ではオフにします。ワイヤログ記録は、HTTPS 呼び出しであっても、暗号化なしで完全なリクエストまたはレスポンスをログに記録します。  
大規模なリクエスト (Amazon S3 へのファイルのアップロードなど) やレスポンスの場合、詳細なワイヤログ記録もアプリケーションのパフォーマンスに大きな影響を与える可能性があります。

## Log4j 2 ログ記録設定の例
<a name="log4j2-example"></a>

 `SLF4J`互換のログライブラリを使用できますが、この例では Log4j 2 を使用して JVM プログラムで SDK からのログ出力を有効にします。

**Gradle の依存関係**

({{X.Y.Z}} リンクに移動して、利用可能な最新バージョンを確認できます）。

```
implementation("org.apache.logging.log4j:log4j-slf4j2-impl:[https://search.maven.org/#search|gav|1|g:org.apache.logging.log4j%20AND%20a:log4j-slf4j2-impl](https://search.maven.org/#search|gav|1|g:org.apache.logging.log4j%20AND%20a:log4j-slf4j2-impl)")
```

**Log4j 2 設定ファイル**

`resources` ディレクトリ`log4j2.xml`に という名前のファイルを作成します (例: `<project-dir>/src/main/resources`)。次の XML 設定を ファイルに追加します。

```
<Configuration status="ERROR">
    <Appenders>
        <Console name="Out">
            <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} %-5p %c:%L %X - %encode{%m}{CRLF}%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Out"/>
        </Root>
    </Loggers>
</Configuration>
```

この設定には、MDC (マッピングされた診断コンテキスト) ログ記録を有効にする `pattern` 属性の`%X`指定子が含まれます。

SDK は、オペレーションごとに次の MDC 要素を追加します。

**rpc**  
呼び出した RPC の名前。例: `S3.GetObject`。

**sdkInvocationId**  
オペレーションのためにサービスクライアントによって割り当てられた一意の ID。ID は、1 回のオペレーションの呼び出しに関連するすべてのログイベントを関連付けます。

## ワイヤレベルのメッセージのログモードを指定する
<a name="sdk-log-mode"></a>

デフォルトでは、 AWS SDK for Kotlin は、API リクエストとレスポンスからの機密データが含まれている可能性があるため、ワイヤレベルのメッセージをログに記録しません。ただし、デバッグの目的でこの詳細レベルが必要になる場合があります。

Kotlin SDK を使用すると、コードでログモードを設定するか、環境設定を使用して以下のデバッグメッセージングを有効にできます。
+ HTTP リクエスト
+ HTTP レスポンス

ログモードはビットフィールドでバックアップされ、各ビットはフラグ (モード) で、値は付加的です。1 つのリクエストモードと 1 つのレスポンスモードを組み合わせることができます。

### コードでログモードを設定する
<a name="set-log-mode-programmatically"></a>

追加のログ記録をオプトインするには、サービスクライアントを構築するときに `logMode`プロパティを設定します。

次の例は、リクエスト (本文あり) とレスポンス (本文なし) のログ記録を有効にする方法を示しています。

```
import aws.smithy.kotlin.runtime.client.LogMode

// ...

val client = DynamoDbClient {
    // ...
    logMode = LogMode.LogRequestWithBody + LogMode.LogResponse
}
```

サービスクライアントの構築中に設定されたログモード値は、環境から設定されたログモード値を上書きします。

### 環境からログモードを設定する
<a name="set-log-mode-from-enviironment"></a>

コードで明示的に設定されていないすべてのサービスクライアントに対してログモードをグローバルに設定するには、次のいずれかを使用します。
+ JVM システムプロパティ: `sdk.logMode`
+ 環境変数: `SDK_LOG_MODE`

以下の大文字と小文字を区別しない値を使用できます。
+ `LogRequest`
+ `LogRequestWithBody`
+ `LogResponse`
+ `LogResponseWithBody`

環境の設定を使用して結合ログモードを作成するには、値をパイプ (`|`) 記号で区切ります。

たとえば、次の例では、前の例と同じログモードを設定します。

```
# Environment variable.
export SDK_LOG_MODE=LogRequestWithBody|LogResponse
```

```
# JVM system property.
java -Dsdk.logMode=LogRequestWithBody|LogResponse ...
```

**注記**  
また、互換性のある SLF4J ロガーを設定し、ログレベルを DEBUG に設定して、ワイヤレベルのログ記録を有効にする必要があります。