AWS SDK para Java 1.x ha entrado en modo de mantenimiento el 31 de julio de 2024 y llegará al final de soporte
Registro de llamadas del AWS SDK para Java
AWS SDK para Java se instrumenta con Apache Commons Logging
Los sistemas de registro admitidos incluyen Java Logging Framework y Apache Log4j, entre otros. En este tema se muestra cómo utilizar Log4j. Puede utilizar la funcionalidad de registro del SDK sin necesidad de realizar cambios en el código de la aplicación.
Para obtener más información sobre Log4j
nota
Este tema se centra en Log4j 1.x. Log4j2 no admite directamente Apache Commons Logging, pero ofrece un adaptador que dirige automáticamente las llamadas de registro a Log4j2 utilizando la interfaz de Apache Commons Logging. Para obtener más información, consulte Commons Logging Bridge
Descarga del archivo JAR de Log4J
Para utilizar Log4j con el SDK, debe descargar el archivo JAR de Log4j JAR del sitio web de Apache. El SDK no incluye el archivo JAR. Copie el archivo JAR en una ubicación que esté en el classpath.
Log4j usa un archivo de configuración, log4j.properties. A continuación, se muestran ejemplos de archivos de configuración. Copie este archivo de configuración en un directorio del classpath. El archivo JAR de Log4j y el archivo log4j.properties no necesitan estar en el mismo directorio.
El archivo de configuración log4j.properties especifica propiedades, como el nivel de registro
-
log4j.logger.com.amazonaws
-
log4j.logger.org.apache.http.wire
Definición del classpath
El archivo JAR de Log4j y el archivo log4j.properties deben estar en el classpath. Si utiliza Apache Antpath en su archivo Ant. El ejemplo siguiente muestra un elemento de la ruta del archivo Ant para el ejemplo
<path id="aws.java.sdk.classpath"> <fileset dir="../../third-party" includes="**/*.jar"/> <fileset dir="../../lib" includes="**/*.jar"/> <pathelement location="."/> </path>
Si utiliza el IDE de Eclipse, puede establecer el classpath abriendo el menú y yendo a Project (Proyecto) | Properties (Propiedades) | Java Build Path (Ruta de compilación de Java).
Errores y advertencias específicos del servicio
Le recomendamos que siempre deje la jerarquía del registrador "com.amazonaws" establecida en "WARN" para identificar los mensajes importantes de las bibliotecas cliente. Por ejemplo, si el cliente de Amazon S3 detecta que su aplicación no ha cerrado correctamente un InputStream y podría estar desperdiciando recursos, el cliente de 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 archivo log4j.properties establece rootLogger en WARN, lo que hace que se incluyan los mensajes de advertencia y de error de todos los registradores de la jerarquía "com.amazonaws". Otra opción consiste en establecer de forma explícita el registrador com.amazonaws en WARN.
log4j.rootLogger=WARN, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n # Or you can explicitly enable WARN and ERROR messages for the {AWS} Java clients log4j.logger.com.amazonaws=WARN
Registro de resumen de solicitudes y respuestas
Cada solicitud a un Servicio de AWS genera un ID de solicitud AWS único que es útil si tiene algún problema con la forma en que un Servicio de AWS está gestionando una solicitud. Se puede acceder a los ID de solicitud de AWS mediante programación a través de los objetos Exception del SDK para cualquier llamada de servicio fallida, y también se pueden informar a través del nivel de registro DEBUG, en el registrador “com.amazonaws.request”.
El siguiente archivo log4j.properties habilita un resumen de solicitudes y respuestas, incluidos los ID de solicitud de AWS.
log4j.rootLogger=WARN, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n # Turn on DEBUG logging in com.amazonaws.request to log # a summary of requests/responses with {AWS} request IDs log4j.logger.com.amazonaws.request=DEBUG
Este es un ejemplo del resultado del registro.
2009-12-17 09:53:04,269 [main] DEBUG com.amazonaws.request - Sending Request: POST https://rds.amazonaws.com / Parameters: (MaxRecords: 20, Action: DescribeEngineDefaultParameters, SignatureMethod: HmacSHA256, AWSAccessKeyId: ACCESSKEYID, Version: 2009-10-16, SignatureVersion: 2, Engine: mysql5.1, Timestamp: 2009-12-17T17:53:04.267Z, Signature: q963XH63Lcovl5Rr71APlzlye99rmWwT9DfuQaNznkD, ) 2009-12-17 09:53:04,464 [main] DEBUG com.amazonaws.request - Received successful response: 200, {AWS} Request ID: 694d1242-cee0-c85e-f31f-5dab1ea18bc6 2009-12-17 09:53:04,469 [main] DEBUG com.amazonaws.request - Sending Request: POST https://rds.amazonaws.com / Parameters: (ResetAllParameters: true, Action: ResetDBParameterGroup, SignatureMethod: HmacSHA256, DBParameterGroupName: java-integ-test-param-group-0000000000000, AWSAccessKeyId: ACCESSKEYID, Version: 2009-10-16, SignatureVersion: 2, Timestamp: 2009-12-17T17:53:04.467Z, Signature: 9WcgfPwTobvLVcpyhbrdN7P7l3uH0oviYQ4yZ+TQjsQ=, ) 2009-12-17 09:53:04,646 [main] DEBUG com.amazonaws.request - Received successful response: 200, {AWS} Request ID: 694d1242-cee0-c85e-f31f-5dab1ea18bc6
Registro detallado en red
En algunos casos, puede ser útil ver exactamente las solicitudes y respuestas que AWS SDK para Java envía y recibe. No debería habilitar este registro en los sistemas de producción, ya que escribir solicitudes (como un archivo que se va a cargar en Amazon S3) o respuestas grandes puede ralentizar considerablemente una aplicación. Si realmente necesita tener acceso a esta información, puede habilitarlo temporalmente a través del registrador HttpClient 4 de Apache. La activación del nivel DEBUG en el registrador org.apache.http.wire permite registrar todos los datos de las solicitudes y respuestas.
El siguiente archivo log4j.properties activa el registro en red completo en Apache HttpClient 4 y solo debe activarse de forma temporal, ya que puede afectar considerablemente al desempeño de su aplicación.
log4j.rootLogger=WARN, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n # Log all HTTP content (headers, parameters, content, etc) for # all requests and responses. Use caution with this since it can # be very expensive to log such verbose data! log4j.logger.org.apache.http.wire=DEBUG
Registro de métricas de latencia
Si está solucionando problemas y desea ver métricas; por ejemplo, qué proceso está tardando más o si es mayor la latencia del cliente o del servidor, el registrador de latencia puede resultarle muy útil. Para habilitar este registrador, configure el registrador com.amazonaws.latency en DEBUG.
nota
Este registrador solo está disponible si se habilitan las métricas de SDK. Para obtener más información sobre el paquete de métricas de SDK, consulte Habilitación de métricas para el AWS SDK para Java.
log4j.rootLogger=WARN, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n log4j.logger.com.amazonaws.latency=DEBUG
Este es un ejemplo del resultado del registro.
com.amazonaws.latency - ServiceName=[{S3}], StatusCode=[200], ServiceEndpoint=[https://list-objects-integ-test-test.s3.amazonaws.com], RequestType=[ListObjectsV2Request], AWSRequestID=[REQUESTID], HttpClientPoolPendingCount=0, RetryCapacityConsumed=0, HttpClientPoolAvailableCount=0, RequestCount=1, HttpClientPoolLeasedCount=0, ResponseProcessingTime=[52.154], ClientExecuteTime=[487.041], HttpClientSendRequestTime=[192.931], HttpRequestTime=[431.652], RequestSigningTime=[0.357], CredentialsRequestTime=[0.011, 0.001], HttpClientReceiveResponseTime=[146.272]