

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Registro em log com o SDK para Java 2.x
<a name="logging-slf4j"></a>

O AWS SDK for Java 2.x usa [SLF4J](https://www.slf4j.org/manual.html), que é uma camada de abstração que permite o uso de qualquer um dos vários sistemas de registro em tempo de execução.

Entre os sistemas de registro em log compatíveis estão o Java Logging Framework e o Apache [ Log4j 2](https://logging.apache.org/log4j/2.x/), entre outros. Este tópico mostra como usar o Log4j 2 como sistema de registro para trabalhar com o SDK.

## Arquivo de configuração do Log4j 2
<a name="log4j-configuration-file"></a>

Normalmente, você usa um arquivo de configuração, chamado `log4j2.xml` com Log4j 2. Os arquivos de configuração de exemplo são mostrados abaixo. Para saber mais sobre os valores usados no arquivo de configuração, consulte o [manual de configuração do Log4j](https://logging.apache.org/log4j/2.x/manual/configuration.html).

O arquivo `log4j2.xml` precisa estar no caminho de classe quando seu aplicativo é inicializado. Para um projeto do Maven, coloque o arquivo no diretório `<project-dir>/src/main/resources`.

O arquivo de configuração `log4j2.xml` especifica propriedades como [nível de registro em log](https://logging.apache.org/log4j/2.x/manual/configuration.html#Loggers), em que a saída do registro em log é enviada (por exemplo, [para um arquivo ou para o console](https://logging.apache.org/log4j/2.x/manual/appenders.html)) e o [formato da saída](https://logging.apache.org/log4j/2.x/manual/layouts.html). O nível de registro especifica o nível de detalhe que o Log4j 2 gera. O Log4j 2 dá suporte ao conceito de múltiplas [https://logging.apache.org/log4j/2.x/manual/architecture.html#](https://logging.apache.org/log4j/2.x/manual/architecture.html#) de registro em log. O nível de registro em log é definido de maneira independente para cada hierarquia. A hierarquia de registro principal que você usa com o AWS SDK for Java 2.x é`software.amazon.awssdk`.

## Adicionar dependência de registro
<a name="sdk-java-logging-classpath"></a>

Para configurar a associação Log4j 2 para SLF4 J em seu arquivo de compilação, use o seguinte.

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

Adicione os elementos a seguir ao arquivo `pom.xml`:

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

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

Adicione o seguinte ao arquivo `build.gradle.kts`:

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

------

A versão mínima do artefato `log4j-slf4j2-impl` a ser usada é a `2.20.0`. Para a versão mais recente, use a versão publicada no [Maven central](https://central.sonatype.com/artifact/org.apache.logging.log4j/log4j-slf4j2-impl). *VERSION*Substitua pela versão que você usará.

## Erros e avisos específicos do SDK
<a name="sdk-java-logging-service"></a>

Recomendamos sempre deixar a hierarquia do registrador em log "software.amazon.awssdk" definida como "WARN" para interceptar todas as mensagens importantes das bibliotecas de cliente do SDK. Por exemplo, se o cliente do Amazon S3 detectar que o aplicativo não fechou corretamente um `InputStream` e possa estar vazando recursos, o cliente do S3 informará isso por meio de uma mensagem de aviso para os logs. Isso também garante que as mensagens serão registradas em log se o cliente enfrentar algum problema ao processar requisições ou respostas.

O arquivo `log4j2.xml` a seguir define o `rootLogger` como “AVISO”, o que faz com que mensagens de aviso e nível de erro de todos os registradores do aplicativo sejam enviadas, *incluindo* aqueles na hierarquia “software.amazon.awssdk”. Você também pode definir explicitamente a hierarquia do registrador em log “software.amazon.awssdk” como “AVISO” se `<Root level="ERROR">` for usado.

**Exemplo de arquivo de configuração Log4j2.xml**

Essa configuração registrará mensagens nos níveis “ERRO” e “AVISO” no console para todas as hierarquias de registradores.

```
<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>
```

## Registro em log do resumo de requisição/resposta
<a name="sdk-java-logging-request-response"></a>

Cada solicitação para um AWS service (Serviço da AWS) gera um ID de AWS solicitação exclusivo que é útil se você tiver problemas com a forma como um AWS service (Serviço da AWS) está lidando com uma solicitação. AWS IDs as solicitações podem ser acessadas programaticamente por meio de [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())objetos no SDK para qualquer chamada de serviço com falha e também podem ser relatadas por meio do nível de registro “DEBUG” do registrador “software.amazon.awssdk.request”.

O arquivo `log4j2.xml` a seguir permite um resumo de solicitações e respostas.

```
<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>
```

Aqui está um exemplo da saída do log:

```
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
```

Se você estiver interessado apenas no ID de solicitação, use`<Logger name="software.amazon.awssdk.requestId" level="DEBUG" />`.

## Registro em log do SDK no nível de depuração
<a name="sdk-debug-level-logging"></a>

Se precisar de mais detalhes sobre o que o SDK está fazendo, você pode definir o nível de registro em log do logger `software.amazon.awssdk` como `DEBUG`. Nesse nível, o SDK gera uma grande quantidade de detalhes, então recomendamos que você defina esse nível para resolver erros usando testes de integração. 

Nesse nível de registro em log, o SDK registra informações sobre configuração, resolução de credenciais, interceptores de execução, atividade de TLS de alto nível, assinatura de solicitações e muito mais.

Veja a seguir uma amostra das declarações que são geradas pelo SDK no nível `DEBUG` para uma chamada `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
...
```

O arquivo `log4j2.xml` a seguir configura a saída anterior.

```
<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>
```

## Ativar o registro em log em nível de rede
<a name="sdk-java-logging-verbose"></a>

Em alguns casos, pode ser útil ver as requisições e as respostas exatas enviadas e recebidas pelo SDK para Java 2.x. Se precisar acessar essas informações, você pode ativá-las temporariamente adicionando a configuração necessária, dependendo do cliente HTTP usado pelo cliente de serviço.

Por padrão, clientes de serviços síncronos, como o [S3Client](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html), usam um Apache subjacente, e clientes de serviços assíncronos HttpClient, como o [S3 AsyncClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html), usam um cliente HTTP Netty sem bloqueio.

Aqui está um detalhamento dos clientes HTTP que podem ser usados para as duas categorias de clientes de serviço:


| Clientes síncronos | Clientes de HTTP assíncronos | 
| --- | --- | 
| [ApacheHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.html) (padrão) | [NettyNioAsyncHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/nio/netty/NettyNioAsyncHttpClient.html) (padrão) | 
| [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) |  | 
| [Apache 5 HttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache5/Apache5HttpClient.html)  | 

Consulte a guia apropriada abaixo para ver as configurações que você precisa adicionar conforme o cliente HTTP subjacente.

**Atenção**  
Recomendamos que você use o arquivo de log somente para fins de depuração. Desative-o em seus ambientes de produção, pois ele pode registrar dados confidenciais. Ele registra a solicitação ou resposta completa sem criptografia, até mesmo para uma chamada HTTPS. Para solicitações ou respostas grandes (por exemplo, para fazer upload de um arquivo Amazon S3), o registro detalhado de conexões também pode afetar significativamente o desempenho do seu aplicativo.

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

Adicione o registrador “org.apache.http.wire” ao arquivo de configuração `log4j2.xml` e defina o nível como “DEBUG”.

O `log4j2.xml` arquivo a seguir ativa o registro completo de conexões para o 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>
```

É necessária uma dependência adicional do Maven no artefato `log4j-1.2-api` para o registro de transmissão de dados com o Apache, pois ele usa 1.2 internamente. 

O conjunto completo de dependências do Maven para o log4j 2, incluindo o registro de transmissão de dados para o cliente Apache HTTP, é mostrado nos trechos do arquivo de compilação a seguir.

**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>
...
```

**DSL Gradle—Kotlin**

```
...
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")
}
...
```

A versão mínima do artefato `log4j-bom` a ser usada é a `2.20.0`. Para a versão mais recente, use a versão publicada no [Maven central](https://central.sonatype.com/artifact/org.apache.logging.log4j/log4j-bom). *VERSION*Substitua pela versão que você usará.

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

Adicione o registrador “org.apache.hc.client5.http.wire” ao arquivo de configuração e defina o nível como “DEBUG”. `log4j2.xml`

O `log4j2.xml` arquivo a seguir ativa o registro completo de conexões para o 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 ]

Para registrar detalhes de clientes de serviço que usam `UrlConnectionHttpClient`, primeiro crie um arquivo `logging.properties` com o seguinte conteúdo:

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

Defina a seguinte propriedade do sistema JVM com o caminho completo de `logging.properties`:

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

Essa configuração registrará somente os cabeçalhos de solicitação e de resposta, por exemplo:

```
<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}
```

Para ver os request/response corpos, adicione `-Djavax.net.debug=all` às propriedades da JVM. Essa propriedade adicional registra uma grande quantidade de informações, incluindo todas as informações de SSL. 

No console de log ou no arquivo de log, pesquise `"GET"` ou `"POST"` para acessar rapidamente a seção de log que contém solicitações e respostas reais. Pesquise `"Plaintext before ENCRYPTION"` para solicitações e `"Plaintext after DECRYPTION"` para respostas para ver o texto completo dos cabeçalhos e corpos.

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

Se seu cliente de serviço assíncrono usa o `NettyNioAsyncHttpClient` padrão, adicione dois registradores adicionais ao seu arquivo `log4j2.xml` para registrar cabeçalhos HTTP e corpos de solicitação e resposta.

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

Veja aqui um exemplo de `log4j2.xml` completo:

```
<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>
```

Essas configurações registram todos os detalhes e request/response corpos do cabeçalho.

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

Se você configurou o cliente de serviço para usar uma instância de um cliente HTTP baseado no AWS CRT, é possível registrar detalhes definindo as propriedades do sistema de JVM ou de forma programática.


|  | 
| --- |
|  Log to a file at "Debug" level  | 
|  Como usar as propriedades do sistema: <pre>-Daws.crt.log.level=Trace <br />-Daws.crt.log.destination=File <br />-Daws.crt.log.filename=<path to file></pre>  |  Programaticamente: <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  | 
|  Como usar as propriedades do sistema: <pre>-Daws.crt.log.level=Trace <br />-Daws.crt.log.destination=Stdout</pre>  |  Programaticamente: <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>  | 

Por motivos de segurança, no nível “Trace”, os clientes HTTP AWS baseados em CRT registram somente cabeçalhos de resposta. Cabeçalhos de solicitação, corpos de solicitação e corpos de resposta não são registrados.

------