

 适用于 Java 的 AWS SDK 1.x于2025年 end-of-support 12月31日达到。我们建议您迁移到 [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html) 以继续获得新功能、可用性改进和安全更新。

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

# 记录 适用于 Java 的 AWS SDK 通话
<a name="java-dg-logging"></a>

使用 [Apache Commons Log](http://commons.apache.org/proper/commons-logging/guide.html) ging 进行检测，Apache Commons Logging 是一个抽象层，允许在运行时使用多个日志系统中的任何一个。 适用于 Java 的 AWS SDK 

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

要了解有关 [Log4j](http://logging.apache.org/log4j/2.x/) 的更多信息，请参阅 [Apache 网站](http://www.apache.org/)。

**注意**  
本主题主要介绍 Log4j 1.x。Log4j2 不直接支持 Apache Commons Logging，但提供一个适配器，将日志记录调用定向到使用 Apache Commons Logging 界面的 Log 4j2。有关更多信息，请参阅 Log4j2 文档中的 [Commons Logging Bridge](https://logging.apache.org/log4j/2.x/log4j-jcl.html)。

## 下载 Log4J JAR
<a name="download-the-log4j-jar"></a>

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

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

log4j.properties 配置文件会指定[日志记录级别](http://logging.apache.org/log4j/2.x/manual/configuration.html#Loggers)、发送日志记录输出的位置（例如：[发送到文件或控制台](http://logging.apache.org/log4j/2.x/manual/appenders.html)）以及[输出格式](http://logging.apache.org/log4j/2.x/manual/layouts.html)等属性。日志级别是记录器生成输出的粒度。Log4j 支持多个日志记录*层次结构* 的概念。可以为每级层次结构单独设置日志记录级别。 适用于 Java 的 AWS SDK支持以下两个日志记录层次结构：
+ log4j.logger.com.amazonaws
+ log4j.logger.org.apache.http.wire

## 设置类路径
<a name="sdk-net-logging-classpath"></a>

Log4j JAR 和 log4j.properties 文件都必须位于类路径中。如果您使用 [Apache Ant](http://ant.apache.org/manual/)，则在 Ant 文件的 `path` 元素中设置类路径。以下示例显示 SDK 附带的 Amazon S3 [示例](https://github.com/aws/aws-sdk-java/blob/master/src/samples/AmazonS3/build.xml)中 Ant 文件的路径元素。

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

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

## 特定服务的错误消息和警告
<a name="sdk-net-logging-service"></a>

我们建议您始终将“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
```

## 请求/响应摘要日志记录
<a name="sdk-net-logging-request-response"></a>

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

以下 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
```

## 详细线路日志记录
<a name="sdk-net-logging-verbose"></a>

在某些情况下，查看 适用于 Java 的 AWS SDK 发送和接收的确切请求和响应可能会很有用。您不应在生产系统中启用此日志记录，因为写出大型请求（例如，正在上传到的文件 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
```

## 延迟指标日志记录
<a name="sdk-latency-logging"></a>

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

**注意**  
此记录器仅在启用开发工具包指标时才可用。要了解更多有关 SDK 指标包的更多信息，请参阅[对 适用于 Java 的 AWS SDK启用指标](generating-sdk-metrics.md)。

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