Iniciar sesión con la versión 2.x SDK para Java - AWS SDK for Java 2.x

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Iniciar sesión con la versión 2.x SDK para Java

The AWS SDK for Java 2.x uses SLF4J, que es una capa de abstracción que permite el uso de cualquiera de los varios sistemas de registro en tiempo de ejecución.

Los sistemas de registro compatibles incluyen Java Logging Framework y Apache Log4j 2, entre otros. En este tema se muestra cómo utilizar Log4j 2 como sistema de registro para trabajar con el. SDK

Archivo de configuración de Log4j 2

Por lo general, se utiliza un archivo de configuración, cuyo nombre es log4j2.xml con Log4j 2. A continuación, se muestran ejemplos de archivos de configuración. Para obtener más información acerca de los valores que se utilizan en el archivo de configuración, consulte el manual de configuración de Log4j.

El archivo log4j2.xml debe estar en la ruta de clases cuando se inicie la aplicación. Para un proyecto de Maven, coloque el archivo en el directorio <project-dir>/src/main/resources.

El archivo de configuración log4j2.xml especifica propiedades como el nivel de registro, dónde se envía la salida de registro (por ejemplo, a un archivo o a la consola) y el formato de la salida. El nivel de registro especifica el nivel de detalle que genera Log4j 2. Log4j 2 admite el concepto de varias jerarquías de registro. El nivel de registro se define de forma independiente para cada jerarquía. La jerarquía de registro principal que se utiliza con el AWS SDK for Java 2.x es. software.amazon.awssdk

Añadir dependencia de registro

Para configurar el enlace de Log4j 2 SLF4J en su archivo de compilación, utilice lo siguiente.

Maven

Añada el siguiente elemento a su archivo pom.xml.

... <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j2-impl</artifactId> <version>VERSION</version> </dependency> ...
Gradle–Kotlin DSL

Añada lo siguiente a su archivo build.gradle.kts.

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

Utilice 2.20.0 para la versión mínima del artefacto log4j-slf4j2-impl. Para obtener la última versión, utilice la versión publicada en Maven Central. Reemplazar VERSION con la versión que usarás.

SDK-errores y advertencias específicos

Le recomendamos que deje siempre la jerarquía de registradores «software.amazon.awssdk» establecida en «» para captar cualquier mensaje importante de las bibliotecas de WARN clientes de la biblioteca cliente. SDK Por ejemplo, si el cliente Amazon S3 detecta que su aplicación no ha cerrado correctamente un InputStream y podría estar desperdiciando recursos, el cliente S3 informa de ello a través de un mensaje de advertencia a los archivos log. Esto también garantiza que se registren los mensajes si el cliente tiene algún problema con el tratamiento de las solicitudes o respuestas.

El siguiente log4j2.xml archivo lo establece en WARN ««, lo que hace que aparezcan mensajes de advertencia y de nivel de error de todos los registradores de la aplicación, incluidos los de la jerarquía «software.amazon.awssdk». rootLogger Como alternativa, puedes establecer explícitamente la jerarquía de registradores «software.amazon.awssdk» en «» si se utiliza. WARN <Root level="ERROR">

Ejemplo de archivo de configuración Log4j2.xml

Esta configuración registrará los mensajes de los niveles «» y «ERROR» en la consola para todas las WARN jerarquías 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 de resumen de solicitud/respuesta

Cada solicitud a an Servicio de AWS genera un identificador de AWS solicitud único que resulta útil si tienes algún problema con la forma en que an gestiona Servicio de AWS una solicitud. AWS IDsSe puede acceder a las solicitudes mediante programación a través de SdkServiceExceptionlos objetos de cualquier llamada de servicio fallida, y también se pueden registrar a través del nivel de registro «» del registrador DEBUG «software.amazon.awssdk.request». SDK

El siguiente archivo log4j2.xml habilita un resumen de solicitudes y respuestas.

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

Este es un ejemplo del resultado del registro:

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

Si solo le interesa el identificador de solicitud, utilice <Logger name="software.amazon.awssdk.requestId" level="DEBUG" />.

Registro a nivel de depuración SDK

Si necesita más detalles sobre lo que SDK está haciendo, puede configurar el nivel de registro del software.amazon.awssdk registrador en. DEBUG En este nivel, el SDK resultado es una gran cantidad de detalles, por lo que le recomendamos que configure este nivel para resolver los errores mediante pruebas de integración.

En este nivel de registro, SDK registra información sobre la configuración, la resolución de credenciales, los interceptores de ejecución, la TLS actividad de alto nivel, la firma de solicitudes y mucho más.

A continuación, se muestra un ejemplo de las sentencias emitidas por el DEBUG nivel SDK at para una S3Client#listBuckets() llamada.

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

El siguiente log4j2.xml archivo configura la salida 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>

Habilite el registro de cables

Puede resultar útil ver las solicitudes y respuestas exactas que envía y recibe la versión SDK para Java 2.x. Si necesita acceder a esta información, puede habilitarla temporalmente añadiendo la configuración necesaria en función del HTTP cliente del servicio que utilice.

De forma predeterminada, los clientes de servicios síncronos, como el S3Client, utilizan un Apache subyacente HttpClient, y los clientes de servicios asíncronos, como el S3 AsyncClient, utilizan un cliente Netty sin bloqueo. HTTP

A continuación, se muestra un desglose de los HTTP clientes que puede utilizar para las dos categorías de clientes de servicio:

Clientes síncronos HTTP Clientes asíncronos HTTP
ApacheHttpClient(predeterminado) NettyNioAsyncHttpClient(predeterminado)
UrlConnectionHttpClient AwsCrtAsyncHttpClient
AwsCrtHttpClient

Consulte la pestaña correspondiente que aparece a continuación para ver los ajustes de configuración que necesita añadir en función del HTTP cliente subyacente.

aviso

Le recomendamos que solo utilice en registro en red para fines de depuración. Deshabilítelo en sus entornos de producción, ya que puede registrar información confidencial. Registra la solicitud o respuesta completa sin cifrar, incluso en el caso de una HTTPS llamada. En el caso de solicitudes o respuestas de gran tamaño (p. ej., para cargar un archivo Amazon S3), el registro detallado de las conexiones también puede afectar considerablemente al rendimiento de la aplicación.

ApacheHttpClient

Añada el registrador «org.apache.http.wire» al archivo de configuración y establezca el log4j2.xml nivel en "». DEBUG

El siguiente log4j2.xml archivo activa el registro completo de cables para 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>

Se requiere una dependencia adicional de Maven en el artefacto log4j-1.2-api para el registro de cables con Apache, ya que utiliza 1.2 internamente.

El conjunto completo de dependencias de Maven para log4j 2, incluido el registro de cables para el HTTP cliente Apache, se muestra en los siguientes fragmentos de archivos de compilación.

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

Utilice 2.20.0 para la versión mínima del artefacto log4j-bom. Para obtener la última versión, utilice la versión publicada en Maven Central. Reemplazar VERSION con la versión que usarás.

UrlConnectionHttpClient

Para registrar los detalles de los clientes del servicio que utilizan la UrlConnectionHttpClient, cree primero un archivo logging.properties con el siguiente contenido:

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

Defina la siguiente propiedad del JVM sistema con la ruta completa delogging.properties:

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

Esta configuración registrará únicamente los encabezados de la solicitud y la respuesta, por ejemplo:

<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 los cuerpos de la solicitud/respuesta, agréguelos -Djavax.net.debug=all a las propiedades. JVM Esta propiedad adicional registra una gran cantidad de información, incluida toda la información. SSL

En la consola de registro o en el archivo de registro, busque "GET" o "POST" para ir rápidamente a la sección del registro que contiene las solicitudes y respuestas reales. Busque "Plaintext before ENCRYPTION" para las solicitudes y "Plaintext after DECRYPTION" para las respuestas para ver el texto completo de las cabeceras y los contenidos.

NettyNioAsyncHttpClient

Si su cliente de servicio asíncrono utiliza la opción predeterminadaNettyNioAsyncHttpClient, añada dos registradores adicionales al log4j2.xml archivo para registrar los HTTP encabezados y los cuerpos de las solicitudes o respuestas.

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

Este es un ejemplo completo de 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>

Esta configuración registra todos los detalles del encabezado y los contenidos de la solicitud/respuesta.

AwsCrtAsyncHttpClient/AwsCrtHttpClient

Si ha configurado su cliente de servicio para que utilice una instancia de un HTTP cliente AWS CRT basado, puede registrar los detalles configurando las propiedades del sistema o mediante programación. JVM

Log to a file at "Debug" level

Uso de las propiedades del sistema:

-Daws.crt.log.level=Trace -Daws.crt.log.destination=File -Daws.crt.log.filename=<path to file>

Mediante programación:

import software.amazon.awssdk.crt.Log; // Execute this statement before constructing the SDK service client. Log.initLoggingToFile(Log.LogLevel.Trace, "<path to file>");
Log to the console at "Debug" level

Uso de las propiedades del sistema:

-Daws.crt.log.level=Trace -Daws.crt.log.destination=Stdout

Mediante programación:

import software.amazon.awssdk.crt.Log; // Execute this statement before constructing the SDK service client. Log.initLoggingToStdout(Log.LogLevel.Trace);

Por motivos de seguridad, en el nivel de «Rastreo», los HTTP clientes AWS CRT basados solo registran los encabezados de respuesta. Los encabezados de las solicitudes, los textos de las solicitudes y los de respuesta no se registran.