Registro em log - AWS SDK para Kotlin

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

O AWS SDK para Kotlin configura um registrador SLF4Jcompatível como padrão do provedor LoggerProvider de telemetria. ComSLF4J, 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, Log4j 2 e Logback.

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, API chaves, senhas e AWS Secrets Manager segredos. O registro eletrônico registra a solicitação ou resposta completa sem criptografia, mesmo para uma HTTPS chamada.

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.

Embora qualquer biblioteca SLF4J de log compatível possa ser usada, este exemplo permite a saída de log dos JVM programas SDK in 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:X.Y.Z")

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 XML configuração 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 MDC (contexto de diagnóstico mapeado).

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

rpc

O nome do invocadoRPC, por exemploS3.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

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

Com o KotlinSDK, você pode definir um modo de log no código ou usando as configurações do ambiente para ativar as 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

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

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:

  • JVMpropriedade do sistema: 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 SLF4J registrador compatível e definir o nível de registro para DEBUG habilitar o registro em nível de fio.