记录Amazon SDK for Java调用 - Amazon SDK for Java
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

记录Amazon SDK for Java调用

Amazon SDK for Java使用 Apache Commons Logging 检测,后者是一个抽象层,可实现在运行时使用多种日志记录系统中的一个。

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

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

注意

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

下载 Log4J JAR

要将 Log4j 与开发工具包一起使用,需要从 Apache 网站下载 Log4j JAR。该开发工具包不包括 JAR。将 JAR 文件复制到类路径中的位置。

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

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

  • log4j.logger.com.amazonaws

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

设置类路径

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

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

如果您使用 Eclipse IDE,可以打开菜单并导航到 Project (项目) | Properties (属性) | Java Build Path (Java 构建路径) 来设置类路径。

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

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

以下 log4j.properties 文件将 rootLogger 设置为 WARN,也就是包含“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

请求/响应摘要日志记录

每次向Amazon Web 服务生成独一无二的Amazon如果您遇到如何发生问题,请求 ID 将非常有用Amazon Web 服务正在处理请求。Amazon如果调用任何服务时失败,可以通过开发工具包中的 Exception 对象来编程访问 Amazon 请求 ID,还可以通过 “com.amazonaws.request” 记录器中的 DEBUG 日志级别进行报告。

以下 log4j.properties 文件将启用请求和响应的汇总,包括:Amazon请求 ID。

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

详细线路日志记录

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

以下 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 指标包的更多信息,请参阅为 启用指标Amazon 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]