记录 AWS SDK for Java 通话 - AWS SDK for Java 1.x

自2024年7月31日起, AWS SDK for Java 1.x已进入维护模式,并将于2025年12月31日end-of-support上线。我们建议您迁移到AWS SDK for Java 2.x以继续接收新功能、可用性改进和安全更新。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

记录 AWS SDK for Java 通话

使用 Apache Commons Log ging 进行检测,Apache Commons Logging 是一个抽象层,允许在运行时使用多个日志系统中的任何一个。 AWS SDK for Java

支持的日志记录系统包括 Java Logging Framework、Apache Log4j 和其他系统。本主题介绍如何使用 Log4j。您可以使用SDK的日志记录功能,而无需对应用程序代码进行任何更改。

要了解有关 Log4j 的更多信息,请参阅 Apache 网站

注意

本主题主要介绍 Log4j 1.x。Log4j2 不直接支持 Apache Commons Logging,但提供一个适配器,将日志记录调用定向到使用 Apache Commons Logging 界面的 Log 4j2。有关更多信息,请参阅 Log4j2 文档中的 Commons Logging Bridge

下载 Log4J JAR

要将 Log4j 与一起使用SDK,你需要JAR从 Apache 网站下载 Log4j。SDK不包括JAR. 将JAR文件复制到类路径上的某个位置。

Log4j 使用配置文件 log4j.properties。配置文件示例如下所示。将该配置文件复制到类路径中的目录中。Log4j JAR 和 log4j.properties 文件不必位于同一个目录中。

log4j.properties 配置文件会指定日志记录级别、发送日志记录输出的位置(例如:发送到文件或控制台)以及输出格式等属性。日志级别是记录器生成输出的粒度。Log4j 支持多个日志记录层次结构 的概念。可以为每级层次结构单独设置日志记录级别。 AWS SDK for Java支持以下两个日志记录层次结构:

  • log4j.logger.com.amazonaws

  • log4j.logger.org.apache.http.wire

设置类路径

log4j JAR 和 log4j.properties 文件都必须位于你的类路径上。如果您使用 Apache Ant,则在 Ant 文件的 path 元素中设置类路径。以下示例显示了 Ant 文件中包含的 Amazon S3 路径元素SDK。

<path id="aws.java.sdk.classpath"> <fileset dir="../../third-party" includes="**/*.jar"/> <fileset dir="../../lib" includes="**/*.jar"/> <pathelement location="."/> </path>

如果你使用的是 EclipseIDE,则可以通过打开菜单并导航到 P ro ject | Properties | Java 生成路径来设置类路径。

特定服务的错误消息和警告

我们建议您始终将 “com.amazonaws” 记录器层次结构设置为 “”,WARN以捕获来自客户端库的任何重要消息。例如,如果 Amazon S3 客户端检测到您的应用程序未正确关闭InputStream并可能泄漏资源,则 S3 客户端会通过警告消息将其报告到日志。另外,由此可确保客户端在处理请求或响应遇到任何问题时会记录相应消息。

以下 log4j.properties 文件将设置为WARN,这会导致包含rootLogger来自 “com.amazonaws” 层次结构中所有记录器的警告和错误消息。或者,您可以将 com.amazonaws 记录器显式设置为。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

请求/响应摘要日志记录

对的每个请求都会 AWS 服务 生成一个唯一的 AWS 请求 ID,如果您在如何处理请求时遇到问题, AWS 服务 这会很有用。 AWS SDK对于任何失败的服务调用,都可以通过中的异常对象以编程方式访问请求IDs,也可以通过 “com.amazonaws.request” 记录器中的DEBUG日志级别报告请求。

以下 log4j.properties 文件支持请求和响应(包括请求)的摘要。 AWS IDs

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

以下是日志输出的示例。

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

详细线路日志记录

在某些情况下,查看 AWS SDK for Java 发送和接收的确切请求和响应可能会很有用。您不应在生产系统中启用此日志记录,因为写出大型请求(例如,正在上传到的文件 Amazon S3)或响应可能会大大降低应用程序的速度。如果您确实需要访问这些信息,可以通过 Apache HttpClient 4 记录器暂时将其启用。在记录器上启用该DEBUG级别可以org.apache.http.wire记录所有请求和响应数据。

以下 log4j.properties 文件在 Apache HttpClient 4 中开启了全线日志记录,只能暂时开启,因为它可能会对应用程序的性能产生重大影响。

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

延迟指标日志记录

如果您正在进行故障排除,并且希望查看诸如哪个进程占用了最多时间或者是服务器还是客户端具有更大延迟等指标,则延迟记录器可能会很有用。将com.amazonaws.latency记录器设置为DEBUG以启用此记录器。

注意

此记录器仅在启用SDK指标后才可用。要了解有关SDK指标包的更多信息,请参阅启用指标 AWS SDK for 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

以下是日志输出的示例。

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]