

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用適用於 Java 的 SDK 2.x 進行記錄
<a name="logging-slf4j"></a>

 AWS SDK for Java 2.x 使用 [SLF4J](https://www.slf4j.org/manual.html)，這是一種抽象層，可在執行時間使用多個記錄系統中的任何一個。

支援的記錄系統包括 Java Logging Framework 和 Apache[ Log4j 2](https://logging.apache.org/log4j/2.x/) 等。本主題說明如何使用 Log4j 2 做為使用 SDK 的記錄系統。

## Log4j 2 組態檔案
<a name="log4j-configuration-file"></a>

您通常會使用名為`log4j2.xml` Log4j 2 的組態檔案。範例組態檔案如下所示。若要進一步了解組態檔案中使用的值，請參閱 [Log4j 組態手冊](https://logging.apache.org/log4j/2.x/manual/configuration.html)。

當您的應用程式啟動時， `log4j2.xml` 檔案必須位於 classpath 上。對於 Maven 專案，請將 檔案放在 `<project-dir>/src/main/resources`目錄中。

`log4j2.xml` 組態檔案會指定[記錄層級](https://logging.apache.org/log4j/2.x/manual/configuration.html#Loggers)、記錄輸出的傳送位置 （例如[檔案或主控台](https://logging.apache.org/log4j/2.x/manual/appenders.html)) 等屬性，以及[輸出的格式](https://logging.apache.org/log4j/2.x/manual/layouts.html)。記錄層級會指定 Log4j 2 輸出的詳細資訊層級。Log4j 2 支援多個記錄[https://logging.apache.org/log4j/2.x/manual/architecture.html#](https://logging.apache.org/log4j/2.x/manual/architecture.html#)的概念。每個階層的記錄層級都是獨立設定。您搭配 使用的主要記錄階層 AWS SDK for Java 2.x 是 `software.amazon.awssdk`。

## 新增記錄相依性
<a name="sdk-java-logging-classpath"></a>

若要在建置檔案中設定 SLF4J 的 Log4j 2 繫結，請使用下列命令。

------
#### [ Maven ]

將下列元素新增至您的 `pom.xml` 檔案。

```
...
<dependency>
   <groupId>org.apache.logging.log4j</groupId>
   <artifactId>log4j-slf4j2-impl</artifactId>
   <version>VERSION</version>
</dependency>
...
```

------
#### [ Gradle–Kotlin DSL ]

將下列項目新增至您的 `build.gradle.kts` 檔案。

```
...
dependencies {
    ...
    implementation("org.apache.logging.log4j:log4j-slf4j2-impl:VERSION")
    ...
}
...
```

------

使用 `2.20.0`做為`log4j-slf4j2-impl`成品的最低版本。針對最新版本，請使用發佈至 [Maven central](https://central.sonatype.com/artifact/org.apache.logging.log4j/log4j-slf4j2-impl) 的版本。以您將使用的版本取代 *VERSION*。

## SDK 特定的錯誤和警告
<a name="sdk-java-logging-service"></a>

我們建議您一律將 "software.amazon.awssdk" 記錄器階層設定為 "WARN"，以從開發套件的用戶端程式庫擷取任何重要訊息。例如，如果 Amazon S3 用戶端偵測到您的應用程式未正確關閉 `InputStream`並可能洩漏資源，S3 用戶端會透過警告訊息向日誌回報。這也可確保在用戶端處理請求或回應發生任何問題時，會記錄訊息。

下列`log4j2.xml`檔案會將 `rootLogger`設定為「WARN」，這會導致來自應用程式中的所有記錄器的警告和錯誤層級訊息輸出，*包括*「software.amazon.awssdk」階層中的訊息。或者，如果`<Root level="ERROR">`使用 ，您可以明確將 "software.amazon.awssdk" 記錄器階層設定為 "WARN"。

**Log4j2.xml 組態檔案範例**

此組態會將「ERROR」和「WARN」層級的訊息記錄到所有記錄器階層的主控台。

```
<Configuration status="WARN">
 <Appenders>
  <Console name="ConsoleAppender" target="SYSTEM_OUT">
   <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%t] %-5p %c:%L - %m%n" />
  </Console>
 </Appenders>

 <Loggers>
  <Root level="WARN">
   <AppenderRef ref="ConsoleAppender"/>
  </Root>
 </Loggers>
</Configuration>
```

## 請求/回應摘要記錄
<a name="sdk-java-logging-request-response"></a>

如果您遇到 如何處理 AWS 請求的問題， 的每個請求都會 AWS 服務 產生唯一的 AWS 服務 請求 ID。 AWS 對於任何失敗的服務呼叫，請求 IDs 可以透過 SDK 中的[https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/exception/SdkServiceException.html#requestId()](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/exception/SdkServiceException.html#requestId())物件以程式設計方式存取，也可以透過「software.amazon.awssdk.request」記錄器的「DEBUG」日誌層級進行報告。

下列`log4j2.xml`檔案會啟用請求和回應的摘要。

```
<Configuration status="WARN">
 <Appenders>
  <Console name="ConsoleAppender" target="SYSTEM_OUT">
   <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%t] %-5p %c:%L - %m%n" />
  </Console>
 </Appenders>

 <Loggers>
  <Root level="ERROR">
   <AppenderRef ref="ConsoleAppender"/>
  </Root>
  <Logger name="software.amazon.awssdk" level="WARN" />
  <Logger name="software.amazon.awssdk.request" level="DEBUG" />
 </Loggers>
</Configuration>
```

以下為日誌輸出的範例：

```
2022-09-23 16:02:08 [main] DEBUG software.amazon.awssdk.request:85 - Sending Request: DefaultSdkHttpFullRequest(httpMethod=POST, protocol=https, host=dynamodb.us-east-1.amazonaws.com, encodedPath=/, headers=[amz-sdk-invocation-id, Content-Length, Content-Type, User-Agent, X-Amz-Target], queryParameters=[])
2022-09-23 16:02:08 [main] DEBUG software.amazon.awssdk.request:85 - Received successful response: 200, Request ID: QS9DUMME2NHEDH8TGT9N5V53OJVV4KQNSO5AEMVJF66Q9ASUAAJG, Extended Request ID: not available
```

如果您只對請求 ID 感興趣，請使用 `<Logger name="software.amazon.awssdk.requestId" level="DEBUG" />`。

## 偵錯層級 SDK 記錄
<a name="sdk-debug-level-logging"></a>

如果您需要 SDK 正在執行之作業的詳細資訊，您可以將`software.amazon.awssdk`記錄器的記錄層級設定為 `DEBUG`。在此層級，軟體開發套件會輸出大量詳細資訊，因此我們建議您將此層級設定為使用整合測試來解決錯誤。

在此記錄層級，軟體開發套件會記錄有關組態、憑證解析、執行攔截器、高階 TLS 活動、請求簽署等資訊。

以下是 SDK 在 `DEBUG` 層級針對`S3Client#listBuckets()`呼叫所輸出的陳述式範例。

```
DEBUG s.a.a.r.p.AwsRegionProviderChain:57 - Unable to load region from software.amazon.awssdk.regions.providers.SystemSettingsRegionProvider@324dcd31:Unable to load region from system settings. Region must be specified either via environment variable (AWS_REGION) or  system property (aws.region).
DEBUG s.a.a.c.i.h.l.ClasspathSdkHttpServiceProvider:85 - The HTTP implementation loaded is software.amazon.awssdk.http.apache.ApacheSdkHttpService@a23a01d
DEBUG s.a.a.c.i.ExecutionInterceptorChain:85 - Creating an interceptor chain that will apply interceptors in the following order: [software.amazon.awssdk.core.internal.interceptor.HttpChecksumValidationInterceptor@69b2f8e5, software.amazon.awssdk.awscore.interceptor.HelpfulUnknownHostExceptionInterceptor@6331250e, software.amazon.awssdk.awscore.eventstream.EventStreamInitialRequestInterceptor@a10c1b5, software.amazon.awssdk.awscore.interceptor.TraceIdExecutionInterceptor@644abb8f, software.amazon.awssdk.services.s3.auth.scheme.internal.S3AuthSchemeInterceptor@1a411233, software.amazon.awssdk.services.s3.endpoints.internal.S3ResolveEndpointInterceptor@70325d20, software.amazon.awssdk.services.s3.endpoints.internal.S3RequestSetEndpointInterceptor@7c2327fa, software.amazon.awssdk.services.s3.internal.handlers.StreamingRequestInterceptor@4d847d32, software.amazon.awssdk.services.s3.internal.handlers.CreateBucketInterceptor@5f462e3b, software.amazon.awssdk.services.s3.internal.handlers.CreateMultipartUploadRequestInterceptor@3d7fa3ae, software.amazon.awssdk.services.s3.internal.handlers.DecodeUrlEncodedResponseInterceptor@58065f0c, software.amazon.awssdk.services.s3.internal.handlers.GetBucketPolicyInterceptor@3605c4d3, software.amazon.awssdk.services.s3.internal.handlers.S3ExpressChecksumInterceptor@585c13de, software.amazon.awssdk.services.s3.internal.handlers.AsyncChecksumValidationInterceptor@187eb9a8, software.amazon.awssdk.services.s3.internal.handlers.SyncChecksumValidationInterceptor@726a6b94, software.amazon.awssdk.services.s3.internal.handlers.EnableTrailingChecksumInterceptor@6ad11a56, software.amazon.awssdk.services.s3.internal.handlers.ExceptionTranslationInterceptor@522b2631, software.amazon.awssdk.services.s3.internal.handlers.GetObjectInterceptor@3ff57625, software.amazon.awssdk.services.s3.internal.handlers.CopySourceInterceptor@1ee29c84, software.amazon.awssdk.services.s3.internal.handlers.ObjectMetadataInterceptor@7c8326a4]
DEBUG s.a.a.u.c.CachedSupplier:85 - (SsoOidcTokenProvider()) Cached value is stale and will be refreshed.
...
DEBUG s.a.a.c.i.ExecutionInterceptorChain:85 - Creating an interceptor chain that will apply interceptors in the following order: [software.amazon.awssdk.core.internal.interceptor.HttpChecksumValidationInterceptor@51351f28, software.amazon.awssdk.awscore.interceptor.HelpfulUnknownHostExceptionInterceptor@21618fa7, software.amazon.awssdk.awscore.eventstream.EventStreamInitialRequestInterceptor@15f2eda3, software.amazon.awssdk.awscore.interceptor.TraceIdExecutionInterceptor@34cf294c, software.amazon.awssdk.services.sso.auth.scheme.internal.SsoAuthSchemeInterceptor@4d7aaca2, software.amazon.awssdk.services.sso.endpoints.internal.SsoResolveEndpointInterceptor@604b1e1d, software.amazon.awssdk.services.sso.endpoints.internal.SsoRequestSetEndpointInterceptor@62566842]
...
DEBUG s.a.a.request:85 - Sending Request: DefaultSdkHttpFullRequest(httpMethod=GET, protocol=https, host=portal.sso.us-east-1.amazonaws.com, encodedPath=/federation/credentials, headers=[amz-sdk-invocation-id, User-Agent, x-amz-sso_bearer_token], queryParameters=[role_name, account_id])
DEBUG s.a.a.c.i.h.p.s.SigningStage:85 - Using SelectedAuthScheme: smithy.api#noAuth
DEBUG s.a.a.h.a.i.c.SdkTlsSocketFactory:366 - Connecting socket to portal.sso.us-east-1.amazonaws.com/18.235.195.183:443 with timeout 2000
...
DEBUG s.a.a.requestId:85 - Received successful response: 200, Request ID: bb4f40f4-e920-4b5c-8648-58f26e7e08cd, Extended Request ID: not available
DEBUG s.a.a.request:85 - Received successful response: 200, Request ID: bb4f40f4-e920-4b5c-8648-58f26e7e08cd, Extended Request ID: not available
DEBUG s.a.a.u.c.CachedSupplier:85 - (software.amazon.awssdk.services.sso.auth.SsoCredentialsProvider@b965857) Successfully refreshed cached value. Next Prefetch Time: 2024-04-25T22:03:10.097Z. Next Stale Time: 2024-04-25T22:05:30Z
DEBUG s.a.a.c.i.ExecutionInterceptorChain:85 - Interceptor 'software.amazon.awssdk.services.s3.endpoints.internal.S3RequestSetEndpointInterceptor@7c2327fa' modified the message with its modifyHttpRequest method.
...
DEBUG s.a.a.c.i.h.p.s.SigningStage:85 - Using SelectedAuthScheme: aws.auth#sigv4
...
DEBUG s.a.a.a.s.Aws4Signer:85 - AWS4 Canonical Request: GET
...
DEBUG s.a.a.h.a.a.i.s.DefaultV4RequestSigner:85 - AWS4 String to sign: AWS4-HMAC-SHA256
20240425T210631Z
20240425/us-east-1/s3/aws4_request
aafb7784627fa7a49584256cb746279751c48c2076f813259ef767ecce304d64
DEBUG s.a.a.h.a.i.c.SdkTlsSocketFactory:366 - Connecting socket to s3.us-east-1.amazonaws.com/52.217.41.86:443 with timeout 2000
...
```

下列`log4j2.xml`檔案會設定先前的輸出。

```
<Configuration status="WARN">
    <Appenders>
        <Console name="ConsoleAppender" target="SYSTEM_OUT">
            <PatternLayout pattern="%-5p %c{1.}:%L - %m%n" />
        </Console>
    </Appenders>

    <Loggers>
        <Root level="WARN">
            <AppenderRef ref="ConsoleAppender"/>
        </Root>
        <Logger name="software.amazon.awssdk" level="DEBUG" />
    </Loggers>
</Configuration>
```

## 啟用線路記錄
<a name="sdk-java-logging-verbose"></a>

查看適用於 Java 的 SDK 2.x 傳送和接收的確切請求和回應會很有用。如果您需要存取此資訊，您可以根據服務用戶端使用的 HTTP 用戶端新增必要的組態來暫時啟用它。

根據預設，同步服務用戶端，例如 [S3Client](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html)，使用基礎 Apache HttpClient，以及非同步服務用戶端，例如 [S3AsyncClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html)，使用 Netty 非封鎖 HTTP 用戶端。

以下是您可以用於兩種服務用戶端類別的 HTTP 用戶端明細：


| 同步 HTTP 用戶端 | 非同步 HTTP 用戶端 | 
| --- | --- | 
| [ApacheHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.html) （預設） | [NettyNioAsyncHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/nio/netty/NettyNioAsyncHttpClient.html) （預設） | 
| [UrlConnectionHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.html) | [AwsCrtAsyncHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/crt/AwsCrtAsyncHttpClient.html) | 
| [AwsCrtHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/crt/AwsCrtHttpClient.html) |  | 
| [Apache5HttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache5/Apache5HttpClient.html)  | 

如需根據基礎 HTTP 用戶端新增的組態設定，請參閱以下適當的索引標籤。

**警告**  
建議您只將連線記錄用於偵錯用途。請在您的生產環境停用此功能，因為它可能記錄敏感資料。它會記錄完整的請求或回應而不加密，即使對於 HTTPS 呼叫亦同。對於大型請求 （例如將檔案上傳到其中 Amazon S3) 或回應，詳細的線路記錄也會大幅影響應用程式的效能。

------
#### [ ApacheHttpClient ]

將 "org.apache.http.wire" 記錄器新增至`log4j2.xml`組態檔案，並將關卡設定為 "DEBUG"。

下列`log4j2.xml`檔案會開啟 Apache HttpClient 的完整線路記錄。

```
<Configuration status="WARN">
 <Appenders>
  <Console name="ConsoleAppender" target="SYSTEM_OUT">
   <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%t] %-5p %c:%L - %m%n" />
  </Console>
 </Appenders>

 <Loggers>
  <Root level="WARN">
   <AppenderRef ref="ConsoleAppender"/>
  </Root>
  <Logger name="software.amazon.awssdk" level="WARN" />
  <Logger name="software.amazon.awssdk.request" level="DEBUG" />
  <Logger name="org.apache.http.wire" level="DEBUG" />
 </Loggers>
</Configuration>
```

使用 Apache 進行線路記錄時，需要額外對`log4j-1.2-api`成品的 Maven 相依性，因為它使用 1.2。

下列建置檔案程式碼片段會顯示 log4j 2 的完整 Maven 相依性集，包括 Apache HTTP 用戶端的線路記錄。

**Maven**

```
...
<dependencyManagement>
    ...
    <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-bom</artifactId>
            <version>VERSION</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
     </dependencies>
</dependencyManagement>
...
<!-- The following is needed for Log4j2 with SLF4J -->
<dependency>
   <groupId>org.apache.logging.log4j</groupId>
   <artifactId>log4j-slf4j2-impl</artifactId>
</dependency>

<!-- The following is needed for Apache HttpClient wire logging -->
<dependency>
   <groupId>org.apache.logging.log4j</groupId>
   <artifactId>log4j-1.2-api</artifactId>
</dependency>
...
```

**Gradle–Kotlin DSL**

```
...
dependencies {
    ...
    implementation(platform("org.apache.logging.log4j:log4j-bom:VERSION"))
    implementation("org.apache.logging.log4j:log4j-slf4j2-impl")
    implementation("org.apache.logging.log4j:log4j-1.2-api")
}
...
```

使用 `2.20.0`做為`log4j-bom`成品的最低版本。針對最新版本，請使用發佈至 [Maven central](https://central.sonatype.com/artifact/org.apache.logging.log4j/log4j-bom) 的版本。以您將使用的版本取代 *VERSION*。

------
#### [ Apache5HttpClient ]

將 "org.apache.hc.client5.http.wire" 記錄器新增至`log4j2.xml`組態檔案，並將關卡設定為 "DEBUG"。

下列`log4j2.xml`檔案會開啟 Apache5 HttpClient 的完整線路記錄。

```
<Configuration status="WARN">
 <Appenders>
  <Console name="ConsoleAppender" target="SYSTEM_OUT">
   <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%t] %-5p %c:%L - %m%n" />
  </Console>
 </Appenders>

 <Loggers>
  <Root level="WARN">
   <AppenderRef ref="ConsoleAppender"/>
  </Root>
  <Logger name="software.amazon.awssdk" level="WARN" />
  <Logger name="software.amazon.awssdk.request" level="DEBUG" />
  <Logger name="org.apache.hc.client5.http.wire" level="DEBUG" />
 </Loggers>
</Configuration>
```

------
#### [ UrlConnectionHttpClient ]

若要記錄使用 之服務用戶端的詳細資訊`UrlConnectionHttpClient`，請先建立具有下列內容`logging.properties`的檔案：

```
handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=FINEST
sun.net.www.protocol.http.HttpURLConnection.level=ALL
```

使用 的完整路徑設定下列 JVM 系統屬性`logging.properties`：

```
-Djava.util.logging.config.file=/full/path/to/logging.properties
```

此組態只會記錄請求和回應的標頭，例如：

```
<Request>  FINE: sun.net.www.MessageHeader@35a9782c11 pairs: {GET /fileuploadtest HTTP/1.1: null}{amz-sdk-invocation-id: 5f7e707e-4ac5-bef5-ba62-00d71034ffdc}{amz-sdk-request: attempt=1; max=4}{Authorization: AWS4-HMAC-SHA256 Credential=<deleted>/20220927/us-east-1/s3/aws4_request, SignedHeaders=amz-sdk-invocation-id;amz-sdk-request;host;x-amz-content-sha256;x-amz-date;x-amz-te, Signature=e367fa0bc217a6a65675bb743e1280cf12fbe8d566196a816d948fdf0b42ca1a}{User-Agent: aws-sdk-java/2.17.230 Mac_OS_X/12.5 OpenJDK_64-Bit_Server_VM/25.332-b08 Java/1.8.0_332 vendor/Amazon.com_Inc. io/sync http/UrlConnection cfg/retry-mode/legacy}{x-amz-content-sha256: UNSIGNED-PAYLOAD}{X-Amz-Date: 20220927T133955Z}{x-amz-te: append-md5}{Host: tkhill-test1.s3.amazonaws.com}{Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2}{Connection: keep-alive}
<Response> FINE: sun.net.www.MessageHeader@70a36a6611 pairs: {null: HTTP/1.1 200 OK}{x-amz-id-2: sAFeZDOKdUMsBbkdjyDZw7P0oocb4C9KbiuzfJ6TWKQsGXHM/dFuOvr2tUb7Y1wEHGdJ3DSIxq0=}{x-amz-request-id: P9QW9SMZ97FKZ9X7}{Date: Tue, 27 Sep 2022 13:39:57 GMT}{Last-Modified: Tue, 13 Sep 2022 14:38:12 GMT}{ETag: "2cbe5ad4a064cedec33b452bebf48032"}{x-amz-transfer-encoding: append-md5}{Accept-Ranges: bytes}{Content-Type: text/plain}{Server: AmazonS3}{Content-Length: 67}
```

若要查看請求/回應內文，請將 `-Djavax.net.debug=all`新增至 JVM 屬性。這個額外的屬性會記錄大量資訊，包括所有 SSL 資訊。

在日誌主控台或日誌檔案中，搜尋 `"GET"`或 `"POST"` 以快速移至包含實際請求和回應的日誌區段。搜尋`"Plaintext before ENCRYPTION"`請求和`"Plaintext after DECRYPTION"`回應，以查看標頭和內文的完整文字。

------
#### [ NettyNioAsyncHttpClient ]

如果您的非同步服務用戶端使用預設 `NettyNioAsyncHttpClient`，請將兩個額外的記錄器新增至您的 `log4j2.xml` 檔案，以記錄 HTTP 標頭和請求/回應內文。

```
<Logger name="io.netty.handler.logging" level="DEBUG" />
<Logger name="io.netty.handler.codec.http2.Http2FrameLogger" level="DEBUG" />
```

以下是完整的`log4j2.xml`範例：

```
<Configuration status="WARN">
    <Appenders>
        <Console name="ConsoleAppender" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%t] %-5p %c:%L - %m%n" />
        </Console>
    </Appenders>

    <Loggers>
        <Root level="WARN">
            <AppenderRef ref="ConsoleAppender"/>
        </Root>
        <Logger name="software.amazon.awssdk" level="WARN" />
        <Logger name="software.amazon.awssdk.request" level="DEBUG" />
        <Logger name="io.netty.handler.logging" level="DEBUG" />
        <Logger name="io.netty.handler.codec.http2.Http2FrameLogger" level="DEBUG" />
    </Loggers>
</Configuration>
```

這些設定會記錄所有標頭詳細資訊和請求/回應內文。

------
#### [ AwsCrtAsyncHttpClient/AwsCrtHttpClient ]

如果您已將服務用戶端設定為使用 CRT 型 HTTP 用戶端的 AWS 執行個體，您可以透過設定 JVM 系統屬性或以程式設計方式記錄詳細資訊。


|  | 
| --- |
|  Log to a file at "Debug" level  | 
|  使用系統屬性： <pre>-Daws.crt.log.level=Trace <br />-Daws.crt.log.destination=File <br />-Daws.crt.log.filename=<path to file></pre>  |  以程式設計方式： <pre>import software.amazon.awssdk.crt.Log;<br /><br />// Execute this statement before constructing the SDK service client.<br />Log.initLoggingToFile(Log.LogLevel.Trace, "<path to file>");</pre>  | 
|  Log to the console at "Debug" level  | 
|  使用系統屬性： <pre>-Daws.crt.log.level=Trace <br />-Daws.crt.log.destination=Stdout</pre>  |  以程式設計方式： <pre>import software.amazon.awssdk.crt.Log;<br /><br />// Execute this statement before constructing the SDK service client.<br />Log.initLoggingToStdout(Log.LogLevel.Trace);</pre>  | 

基於安全考量，在「追蹤」層級，以 AWS CRT 為基礎的 HTTP 用戶端只會記錄回應標頭。不會記錄請求標頭、請求內文和回應內文。

------