

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
<a name="logging"></a>

O AWS SDK para Kotlin configura um registrador compatível com [SLF4J](https://www.slf4j.org/manual.html) como o padrão do provedor `LoggerProvider` de telemetria. Com SLF4 J, que é uma camada de abstração, você pode usar qualquer um dos vários sistemas de registro em tempo de execução. [Os sistemas de registro suportados incluem [Java Logging APIs](https://docs.oracle.com/javase/8/docs/technotes/guides/logging/), [Log4j 2](https://logging.apache.org/log4j/2.x/) e Logback.](https://logback.qos.ch/)

**Atenção**  
Recomendamos que você use o registro de conexões somente para fins de depuração. (O registro de cabos é discutido abaixo.) Desative-o em seus ambientes de produção porque ele pode registrar dados confidenciais, como endereços de e-mail, tokens de segurança, chaves de API, senhas e AWS Secrets Manager segredos. O registro de conexões registra a solicitação ou resposta completa sem criptografia, mesmo para uma chamada HTTPS.   
Para solicitações ou respostas grandes (como o upload de um arquivo para o Amazon S3), o registro detalhado de conexões também pode afetar significativamente o desempenho do seu aplicativo.

## Exemplo de configuração de registro do Log4j 2
<a name="log4j2-example"></a>

 Embora qualquer biblioteca `SLF4J` de registros compatível possa ser usada, este exemplo permite a saída de log do SDK em programas JVM usando o Log4j 2:

**Dependências do Gradle**

(Você pode navegar até o {{X.Y.Z}} link para ver a versão mais recente disponível.)

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

**Arquivo de configuração do Log4j 2**

Crie um arquivo nomeado `log4j2.xml` em seu `resources` diretório (por exemplo,`<project-dir>/src/main/resources`). Adicione a seguinte configuração XML ao arquivo:

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

Essa configuração inclui o `%X` especificador no `pattern` atributo que ativa o registro do MDC (contexto de diagnóstico mapeado).

O SDK adiciona os seguintes elementos do MDC para cada operação.

**rpc**  
O nome da RPC invocada, por exemplo. `S3.GetObject`

**sdkInvocationId**  
Uma ID exclusiva atribuída pelo cliente do serviço para a operação. O ID correlaciona todos os eventos de registro relacionados à invocação de uma única operação.

## Especifique o modo de registro para mensagens em nível de fio
<a name="sdk-log-mode"></a>

Por padrão, o AWS SDK para Kotlin não registra mensagens em nível de fio porque elas podem conter dados confidenciais de solicitações e respostas da API. No entanto, às vezes você precisa desse nível de detalhe para fins de depuração. 

Com o Kotlin SDK, você pode definir um modo de log no código ou usar as configurações do ambiente para habilitar mensagens de depuração para o seguinte:
+ Solicitações HTTP
+ Respostas HTTP

O modo de log é apoiado por um campo de bits em que cada bit é um sinalizador (modo) e os valores são aditivos. Você pode combinar um modo de solicitação e um modo de resposta.

### Definir o modo de registro no código
<a name="set-log-mode-programmatically"></a>

Para optar pelo registro adicional, defina a `logMode` propriedade ao criar um cliente de serviço.

O exemplo a seguir mostra como habilitar o registro de solicitações (com o corpo) e a resposta (sem o corpo).

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

// ...

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

Um valor de modo de log definido durante a construção do cliente de serviço substitui qualquer valor de modo de log definido do ambiente.

### Defina o modo de registro a partir do ambiente
<a name="set-log-mode-from-enviironment"></a>

Para definir um modo de log globalmente para todos os clientes de serviço não configurados explicitamente no código, use um dos seguintes:
+ Propriedade do sistema JVM: `sdk.logMode`
+ Variável de ambiente: `SDK_LOG_MODE`

Os seguintes valores que não diferenciam maiúsculas de minúsculas estão disponíveis:
+ `LogRequest`
+ `LogRequestWithBody`
+ `LogResponse`
+ `LogResponseWithBody`

Para criar um modo de log combinado usando as configurações do ambiente, você separa os valores com um símbolo pipe (`|`).

Por exemplo, os exemplos a seguir definem o mesmo modo de log do exemplo anterior.

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

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

**nota**  
Você também deve configurar um registrador SLF4 J compatível e definir o nível de registro como DEBUG para habilitar o registro em nível de fio.